管理员和用户的Codeigniter角色

时间:2016-10-05 19:54:38

标签: php codeigniter

users.php

我已经制作了一个现在可以使用的登录表单,然后转到admin_view。我的用户需要user_login,因此如果用户是user,则应加载user_view。

我首先需要对数据库进行一些类型枚举或布尔值(对于admin为1而对用户为0

public function login() {
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[3]');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[3]');
    $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'trim|required|min_length[3]|matches[password]');

    if ($this->form_validation->run() == FALSE) {
        $data = array(
            'errors' => validation_errors()
            );

        $this->session->set_flashdata($data);

        redirect('home');
    } else {
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $user_id = $this->user_model->login_user($username, $password);

        if($user_id) {
            $user_data = array(
                'user_id' => $user_id,
                'username' => $username,
                'logged_in' => true
                );

            $this->session->set_userdata($user_data);
            $this->session->set_flashdata('login_success', 'You are now logged in');
            // I need to load a user_view when the user have a user role.
            $data['main_view'] = "admin_view";
            $this->load->view('layouts/main', $data);
            // redirect('home/index');

            redirect('home/index');
        }
    }
}

1 个答案:

答案 0 :(得分:0)

重新阅读问题后编辑:如果您可以设置管理员角色,则也可以设置用户角色。它与user_role列的方法相同。如果需要,您可以将其设置为1-9或1-20或1-999。

有很多方法可以达到这个目的,所以没有一种方法可以回答你的问题。例如,您可以按照用户表中的建议设置列,以指示用户是否为管理员。 (如何将其设置为admin是一个不同的问题,但现在您可以手动更改它。)

经过身份验证后,您可以设置会话变量以指示用户是管理员,或者在登录时,返回包含多个用户ID但也包含角色设置的数组。

就我个人而言,我希望至少至少具有一个用户角色,以及我为系统管理员保留的管理员角色和神角色。但是,通常将角色设置在不同的表中,因此可以设置许多角色和职责。甚至可以使角色可以根据某些权限设置进行编辑,但这要复杂得多。

当您授权用户时,即他们是否已登录,您不仅可以返回他们已登录但是他们是否为管理员,或者他们拥有什么级别的权限。如果他们是管理员,您可以将管理导航添加到菜单,或者添加到完全独立的管理部分的链接,或者将他们立即重定向到管理员屏幕。这取决于你。

在您发布的控制器中,您似乎正在加载管理视图,然后将它们重定向到另一个控制器。这对我没有任何意义。它应该是这样的:

$user = $this->authentication_model->login_user($username, $password);
if ( (!empty($user)) AND (empty($user['error']))  // however your authentication works
{ 
    if ($user['is_admin'] > 0)
    {
        // is user AND is admin so deal with as you want
        // You might set session variables for instance
        // Or you might redirect to admin screens
        // Or you might redirect different admin level differently
        // Or you might just load additional menu views
    }
    else
    {
       // is user so do whatever
       // You might set a session variable
       // You might set a cookie value
       // You might redirect
    }
}
else
{
     // There was a login error message so deal with that here
}

同样,有很多不同的方法可以做到这一点。可能值得一看现有的一些现有身份验证和授权脚本,供使用或学习。这里有一个很好的总结,但它并非详尽无遗。

http://webeasystep.com/blog/view_article/What_is_the_best_authentication_library_for_CodeIgniter

就我个人而言,我喜欢ION Auth,我发现它很容易以任何我想要的方式定制和使用,有限的时尚或全面使用,但这是个人偏好。