Php Codeigniter:限制访问的最佳方式

Php Codeigniter:限制访问的最佳方式,php,codeigniter,Php,Codeigniter,好的,现在我正在使用Codeigniter开发我的应用程序(开始喜欢它:) 我的整个系统将只对登录的用户可用,一旦他们来了,系统将把他们带到登录页面 现在我开始限制不同用户组的访问权限。所以我的大问题是,哪种方法适合执行登录检查 对每个控制器方法执行检查 是否可以直接写入header.php视图文件,并在需要时执行检查和重定向 由于管理员和前端都将根据用户角色限制访问,因此来宾将无法访问任何内容 编辑: 非常抱歉,我忘了提到我正在使用Ion Auth库进行身份验证。此外,我还编写了一些基于i

好的,现在我正在使用Codeigniter开发我的应用程序(开始喜欢它:)

我的整个系统将只对登录的用户可用,一旦他们来了,系统将把他们带到登录页面

现在我开始限制不同用户组的访问权限。所以我的大问题是,哪种方法适合执行登录检查

  • 对每个控制器方法执行检查
  • 是否可以直接写入header.php视图文件,并在需要时执行检查和重定向
由于管理员和前端都将根据用户角色限制访问,因此来宾将无法访问任何内容

编辑:


非常抱歉,我忘了提到我正在使用
Ion Auth
库进行身份验证。此外,我还编写了一些基于
ion auth
的帮助程序,以简化工作。

您可以在core目录中创建名为
MY_controller.php
的扩展核心控制器,但前缀必须与config.php中配置的前缀匹配

MY\u Controller
中,您可以创建一个名为
is\u logged\u In
的函数,用于检查登录会话(如果基于会话)是否存在且有效

例如,在每个需要有效登录会话的控制器中,在构造方法中,您只需说
if(!$this->is_logged_In()){redirect('/login');}


我之所以喜欢这样的方法,而不是在每个单独的控制器中进行会话检查,是因为如果(比如)登录会话索引的名称发生更改,您只需在一个中心位置修改登录检查。

您可以在core目录中创建一个名为
MY_controller.php
的扩展核心控制器,但是,前缀必须与config.php中配置的前缀匹配

MY\u Controller
中,您可以创建一个名为
is\u logged\u In
的函数,用于检查登录会话(如果基于会话)是否存在且有效

例如,在每个需要有效登录会话的控制器中,在构造方法中,您只需说
if(!$this->is_logged_In()){redirect('/login');}


我之所以喜欢这样的方法,而不是在每个单独的控制器中进行会话检查,是因为如果(比如)登录会话索引的名称发生更改,您只需在一个中心位置修改登录检查。

您可以在core目录中创建一个名为
MY_controller.php
的扩展核心控制器,但是,前缀必须与config.php中配置的前缀匹配

MY\u Controller
中,您可以创建一个名为
is\u logged\u In
的函数,用于检查登录会话(如果基于会话)是否存在且有效

例如,在每个需要有效登录会话的控制器中,在构造方法中,您只需说
if(!$this->is_logged_In()){redirect('/login');}


我之所以喜欢这样的方法,而不是在每个单独的控制器中进行会话检查,是因为如果(比如)登录会话索引的名称发生更改,您只需在一个中心位置修改登录检查。

您可以在core目录中创建一个名为
MY_controller.php
的扩展核心控制器,但是,前缀必须与config.php中配置的前缀匹配

MY\u Controller
中,您可以创建一个名为
is\u logged\u In
的函数,用于检查登录会话(如果基于会话)是否存在且有效

例如,在每个需要有效登录会话的控制器中,在构造方法中,您只需说
if(!$this->is_logged_In()){redirect('/login');}


我之所以喜欢这样的方法,而不是在每个控制器中执行会话检查,是因为如果您登录的会话索引的名称发生更改,您只需在一个中心位置修改登录检查。

如果您在
header.php
中执行此操作,则必须使用多个
header.php
来执行检查。我的方法是使用codeigniter的内置
会话
库,然后使用:

if($this->session->userdata('logged_in'){
    $this->model_name->function();
    $this->load->view("header");
}else{
    redirect("login", "refresh");
}
您可以这样做:

$array = array(
    'logged_in'           => true,
    'admin'               => true,
    'some_other_thing'    => false
);

$this->session->set_userdata('admin'. $array); 

如果在
header.php
中执行此操作,则必须使用多个
header.php
来执行检查。我的方法是使用codeigniter的内置
会话
库,然后使用:

if($this->session->userdata('logged_in'){
    $this->model_name->function();
    $this->load->view("header");
}else{
    redirect("login", "refresh");
}
您可以这样做:

$array = array(
    'logged_in'           => true,
    'admin'               => true,
    'some_other_thing'    => false
);

$this->session->set_userdata('admin'. $array); 

如果在
header.php
中执行此操作,则必须使用多个
header.php
来执行检查。我的方法是使用codeigniter的内置
会话
库,然后使用:

if($this->session->userdata('logged_in'){
    $this->model_name->function();
    $this->load->view("header");
}else{
    redirect("login", "refresh");
}
您可以这样做:

$array = array(
    'logged_in'           => true,
    'admin'               => true,
    'some_other_thing'    => false
);

$this->session->set_userdata('admin'. $array); 

如果在
header.php
中执行此操作,则必须使用多个
header.php
来执行检查。我的方法是使用codeigniter的内置
会话
库,然后使用:

if($this->session->userdata('logged_in'){
    $this->model_name->function();
    $this->load->view("header");
}else{
    redirect("login", "refresh");
}
您可以这样做:

$array = array(
    'logged_in'           => true,
    'admin'               => true,
    'some_other_thing'    => false
);

$this->session->set_userdata('admin'. $array); 

好的,我所理解的是用我的控制器覆盖核心CI控制器,并在
\u construct()
中执行登录用户检查?完全正确。我实际上说的是有一个
is_logged_in
功能,但我刚刚意识到你说的每个页面都只供登录用户使用,所以你的检查实际上可以在
我的控制器的构造函数中进行。好吧,很酷,现在让我试试超级酷和完美的方式。。以我想要的方式完美工作…非常感谢..好的,我理解的是用我的\u控制器覆盖核心CI\u控制器,并在
\u construct()
中执行登录用户检查?完全正确。我实际上说的是有一个
is_logged_in
函数,但我刚刚意识到你说的每个页面都是仅供登录用户使用的,所以你的检查实际上可以在
我的控制器的构造函数中进行。好吧