我正在开发一个基于角色的登录系统。实际上,我应该对这个基于角色的登录系统中的控制器,模型和视图做些什么来分配不同的访问标准。
我对如何根据角色设置和访问用户感到困惑。
主要是我不确定如何将不同的视图分配为角色。
离。我申请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');
}
}
我不确定这样使用是否安全。或者我必须做一些其他的好事。
答案 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());
}
}