Codeigniter

时间:2017-01-08 04:52:10

标签: php codeigniter session login controller

我正在开发一个基于角色的登录系统。实际上,我应该对这个基于角色的登录系统中的控制器,模型和视图做些什么来分配不同的访问标准。

我对如何根据角色设置和访问用户感到困惑。

主要是我不确定如何将不同的视图分配为角色。

离。我申请if条件检查角色,然后根据菜单显示不同链接的角色查看。像主管理员只能看帐户标签。用户无法看到帐户标签。

我还在控制器中设置了与会话相同的if条件,以防止直接访问该页面。

这是我应用于菜单和控制器的代码。

<?php 
        $login_role= $this->session->userdata('user_data');
        if($login_role['user_role'] === 'super_admin'){

            ?><li><a href="<?php echo base_url('account/view_account'); ?>">
            <div>Account</div></a></li><?php
        }
    ?>

和控制器中的相同条件

 public function index() 
{
    $login_role= $this->session->userdata('user_data');

    if($login_role['user_role'] === 'super_admin')
    {
        $this->load->model('location_model');
        $city_list = $this->location_model->get_city_list();
        $state_list = $this->location_model->get_state_list();
        //log_message('info', 'City and State list will sucessfully loded.');         
        $this->load->view('admin/account_insert',['city_list'=>$city_list,'state_list'=>$state_list]);    
    } else {

        redirect('admin/dashboard','refresh');
    }


}

我不确定这样使用是否安全。或者我必须做一些其他的好事。

1 个答案:

答案 0 :(得分:5)

我正在为所有用户角色使用单个Controller Login系统。我有一个用户角色表,我在用户表中有角色ID。然后我有与这些角色匹配的控制器名称。当用户登录时,我检查角色并在验证后将用户重定向到该控制器。以下是我的登录控制器的索引功能。

public function index()
{
    if(!$this->isLoggedIn())
    {
        $data['title']='Title You want to set on Page';
        if($_POST)
        {
            $config=array(
                array(
                    'field' => 'email',
                    'label' => 'Email',
                    'rules' => 'trim|required|valid_email',
                ),
                array(
                    'field' => 'password',
                    'label' => 'Password',
                    'rules' => 'trim|required',
                ),
            );
            $this->form_validation->set_rules($config);
            if($this->form_validation->run()==false)
            {
                $data['errors']=validation_errors();
                $this->load->view('static/head', $data);
                $this->load->view('admin/login');
            }
            else
            {
                $user=$this->admin_model->checkUser($_POST);
                if(!empty($user))
                {
                    if($user['role']==1)
                    {
                        $user['type']='admin';
                    }
                    elseif($user['role']==2)
                    {
                        $user['type']='team';
                    }
                    elseif($user['role']==3)
                    {
                        $user['type']='client';
                    }
                    elseif($user['role']==4)
                    {
                        $user['type']='manager';
                    }
                    $this->session->set_userdata($user);
                    redirect(base_url().$user['type']);
                }
                else
                {
                    $data['errors']='The credentials you have provided are incorrect or your account has not been approved yet.';
                    $this->load->view('static/head', $data);
                    $this->load->view('admin/login');
                }
            }
        }
        else
        {
            $this->load->view('static/head', $data);
            $this->load->view('admin/login');
        }
    }
    else
    {
        redirect(base_url().$this->session->userdata['type']);
    }

}

它非常适合我。此外,在每个控制器中,我都有功能来检查用户是否已登录此角色,如此

public function isLoggedIn()
{
    if(!empty($this->session->userdata['id'])&& $this->session->userdata['type']=='team')
    {
        return true;
    }
    else
    {
        return false;
    }
}

然后我渲染该控制器的索引功能。 E.g以下是团队控制器索引功能

public function index()
{
    if($this->isLoggedIn())
    {
        $data['menu']=$this->team_model->getMenuItems();
        $data['task_logs']=$this->admin_model->getAllLogs();

        $data['title']='Title';
        $this->load->view('static/head',$data);
        $this->load->view('static/header');
        $this->load->view('static/sidebar');
        $this->load->view('team/dashboard');
        $this->load->view('static/footer');
    }
    else
    {
        redirect(base_url());
    }

}