未在 codeigniter 中设置会话时,未授予对控制器中某些方法的访问权限

2022-08-30 23:14:57

我希望用户在未设置会话时不访问控制器的某些方法。为此,我可以在所有方法中检查会话,如果设置了会话,则只能转到更远的地方,否则重定向到特定页面。由于我有很多方法,我不希望用户在没有设置会话时访问。它批量通过所有方法和检查会话。是否有任何快捷方式可以获得此功能。

我尝试检查会话是控制器的构造函数方法,但它适用于所有方法。但是我只想在未设置会话的情况下阻止特定方法。如何做到这一点。

例:

class dashboard extends CI_Controller {

 function __construct() {
    parent::__construct();
    $this->load->library('session');
    $this->load->model('dbmodel');
    $this->load->helper('url','form');


    //verified user check
    if($this->session->userdata("unverified") != FALSE) {
        redirect("verify_user");  

    }

    }
    //verified user check
}

上面的代码,重定向到verify_user控制器,一旦用户转到仪表板控制器时发现“未验证”会话。但是我想提供对仪表板控制器的某种方法的访问权限。不是所有的方法。每当找到会话时,此代码都会重定向,并且不授予对仪表板控制器的任何方法的访问权限。


答案 1

检查这个 它可能会帮助你

class MY_controller extends CI_controller{
    function __construct() {
        parent::__construct();
    }
    function _required_user($params =array()){
        $action =$this->router->fetch_method();
        if(empty($params['except']))
            $params['except'] =array();
        if(empty($params['only']))
            $params['only'] =array();
        if(count($params['except']) > 0 && in_array($action,$params['except']))
            return true;    
        if(count($params['only']) > 0 && in_array($action,$params['only']) && $this->session->userdata('is_login'))
            return true;
        if($this->session->userdata('is_login'))    
            return true;
        redirect('login');  

    }       
}

class dashboard extends MY_Controller {

  function __construct() {
        parent::__construct();
        $this->load->library('session');
        $this->load->model('dbmodel');
        $this->load->helper('url','form');
        $this->_required_user(array('except'=>array('index')))      
    }
    function add(){
    /*
    Session required
    */  
    }
    function edit(){
    /*
    Session required
    */  
    }
    function index(){
    /*
    no session required
    */
    }
  }

 class content extends MY_Controller{
    function __construct() {
        parent::__construct();
        $this->load->library('session');
        $this->load->model('dbmodel');
        $this->load->helper('url','form');
        $this->_required_user(array('only'=>array('index')))        
    }
    function add(){
    /*
    no Session required
    */  
    }
    function edit(){
    /*
    no Session required
    */  
    }
    function index(){
    /*
    session required
    */
    }
 }  
class Myaccount extends MY_Controller{
    function __construct() {
        parent::__construct();
        /*
        for all functions session required
        */
        $this->_required_user()     

    }
    function edit(){
    /*
    session required
    */
    }
    function save(){
    /*
    session required
    */
    }
 }
  1. 仅参数:仅给定函数/函数的检查会话是否存在
  2. 参数除外:不检查给定函数/函数的会话
  3. 无参数:检查控制器中所有功能的会话并重定向

您可以根据需要修改_reuired_user功能


答案 2

你可以尝试以下 - 如果它有帮助

在应用程序/核心文件夹中创建一个名为 MY_Controller类,如下所示

class MY_Controller extends CI_Controller
{

    public function checkUserSession()
    {
        if($this->session->userdata("unverified") != FALSE) 
        {
            redirect("verify_user");
        }
        return true;
    }

}

之后,您的仪表板控制器应如下所示

class dashboard extends MY_Controller 
{
    public function show_dashboard()
    {
        if ($this->checkUserSession())
        {
            //your code
        }
    }
}

推荐