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');
}
}
}
答案 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,我发现它很容易以任何我想要的方式定制和使用,有限的时尚或全面使用,但这是个人偏好。