我是codeigniter的新手。我有一个系统,我有三个用户:superadmin,admin和用户。 superadmin可以创建管理员,管理员可以创建用户并查看他们,但无法看到superadmin创建的其他管理员。现在我希望用户只能查看自己的个人资料,而不能查看数据库中的所有用户。我怎么能做到这一点?
控制器:
public function index ()
{
// Fetch all users
$this->data['users'] = $this->client_m->get();
// Load view
$this->data['subview'] = 'client/user/index';
$this->load->view('client/_layout_main', $this->data);
}
// get函数返回数据库中的所有用户,但我只想要当前用户
模特:
public function login ()
{
$user = $this->get_by(array(
'email' => $this->input->post('email'),
'password' => $this->hash($this->input->post('password')),
), TRUE);
if (count($user)) {
// Log in user
$data = array(
'email' => $user->email,
'id' => $user->id,
'loggedin' => TRUE,
);
$this->session->set_userdata($data);
}
}
观点:
<div class="jumbotron">
<section>
<table class="table table-hover">
<thead>
<tr class="success">
<th>Name</th>
<th>Email</th>
<th>Balance</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<?php if(count($users)): foreach($users as $user): ?>
<tr class="info">
<td><?php echo anchor('client/user/edit/' . $user->id, $user->name); ?></td>
<td><?php echo anchor('client/user/edit/' . $user->id, $user->email); ?></td>
<td><?php echo anchor('client/user/edit/' . $user->id, $user->balance); ?></td>
<td><?php echo btn_edit('client/user/edit/' . $user->id); ?></td>
<td><?php echo btn_delete('client/user/delete/' . $user->id); ?></td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="3">We could not find any users.</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</section>
</div>
我目前正在抓取所有用户,但我只想向用户显示他的个人资料而不是其他用户的详细信息。
答案 0 :(得分:1)
而不是
$this->client_m->get();
制作并使用类似的东西
$this->client_m->get_users_profile();
由于您将登录用户存储在会话中,因此使用它并在get_users_profile()中执行类似的操作(当然使用您自己的列和表名称):
$this->db->select('uid, name, balance, etc');
$query = $this->db->get_where('users_profiles', array('id' => $this->session->userdata('id')));
return $query->result();
仅此一项就可以完成您想要做的事情,但您应该在控制器中使用某些逻辑来根据权限级别做出决策。由于您正在使用会话,我建议使用另一个会话变量“role”,您可以在其中存储用户权限级别。然后在您的控制器中,您可以根据角色制作deciisons。例如,如果您有一个显示管理页面的管理员控制器,您可以检查登录用户的角色,如果他们不是管理员,您可以重定向它们。这也可以帮助你在配置文件中,因为你可能需要组合的东西,如果你是一个管理员,你可以看到所有的配置文件,但如果你是一个普通用户,你只能看到你的。换句话说,您需要在任何地方获得更多级别的信息以做出更好的决策,因此您可以存储角色并将其与其他数据结合使用以做出决策。
答案 1 :(得分:0)
当您使用flexi身份验证时,您可以从管理面板为用户组创建权限。当用户登录时,他将使用会话值登录,例如姓名,电子邮件,组和所有权限。 (他从集团获得)。然后,您可以使用flexi auth特权检查条件
if (! $this->flexi_auth->is_privileged('View Users'))
{
$this->session->set_flashdata('message', '<p class="error_msg">You do not have privileges to view user accounts.</p>');
redirect('auth_admin');
}
else{
//User has the View Users privilege. Do this..
}
下载演示文件并检查......这将更容易。