如何在codeigniter中仅加载用户配置文件

时间:2015-07-25 11:02:58

标签: php codeigniter authentication

我是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>

我目前正在抓取所有用户,但我只想向用户显示他的个人资料而不是其他用户的详细信息。

2 个答案:

答案 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.. 
    }

下载演示文件并检查......这将更容易。