当前,如果我访问的主用户/订户能够在未登录时查看页面,我已经在主控制器中创建了一个功能-有关代码的说明,请参考User role page redirect codeigniter。
public function subscriber() {
$this->load->view('header', $data);
$this->load->view('dashboard/subscriber', $data);
$this->load->view('footer');
}
答案 0 :(得分:1)
根据用户是否登录来保护不同路由的最简单方法是使用会话变量。 当用户登录您的应用时,然后设置像这样的sessio变量
$this->session->set_userdata('is_logged_in', TRUE);
并在控制器的构造函数中检查该变量,以便在调用任何方法之前验证用户。
class Demo_controller extends CI_Controller{
public function __construct(){
parent::__construct();
// check if user is logged in
if(!$this->session->userdata('is_logged_in')){
// user is not logged in then redirect user to any page you want
}
}
}
您还可以使用钩子在Codeigniter中创建此类系统
答案 1 :(得分:0)
您需要保护您的页面。假设仅在用户登录时设置$_SESSION['email']
变量。我们可以将其用作标志来确定用户是否登录。
将这些功能添加到您的User_model
(确保模型已自动加载)。
public function is_logged() {
if (is_null($this->session->userdata('email')) {
redirect('main/login');
exit; // just in case
}
}
public function is_allowed($perm) {
$roles = $this->session->userdata('roles');
if ($roles !== 'admin' && $perm !== $roles) {
// maybe set flashdata so user knows why they were redirected
redirect('main/' . $roles);
exit; // just in case
}
}
然后是控制器:
class Subscriber extends CI_Controller {
public function construct() {
parent::__construct();
$this->user_model->is_logged(); // can merge with below func, just make sure it is called first (!imp)
$this->user_model->is_allowed('subscriber');
}
public function subscriber() {
$this->load->view('header', $data);
$this->load->view('dashboard/subscriber', $data);
$this->load->view('footer');
}
}
这是最基本的。如果您愿意,可以更喜欢它。我个人使用基于数据库的ACL系统。
还要考虑在数据库和其他地方将roles
重命名为role
,考虑到用户只有1个角色(考虑到您先前的问题),这令人困惑。
答案 2 :(得分:0)
如果您想防止用户未登录codeigniter而访问某些页面,
您应该先登录set_userdata
才能登录。
按如下所示更改控制器。如果会话数据不为空,它将把您重定向到特定页面。否则,“写出需要做什么”。
public function subscriber()
{
if($this->session->userdata('id')!="")
{
$this->load->view('header', $data);
$this->load->view('dashboard/subscriber', $data);
$this->load->view('footer');
} else {
//your code here
}
}