限制一些动作,_remap函数,CodeIgniter

时间:2010-12-05 19:19:59

标签: php codeigniter

我想只为登录用户提供一些操作。 我试图通过这段代码限制一些:

function _remap($method)
    {
        $restricted = array('update_rating', 'delete_post');
        if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
        {
           echo 'Log in, please'; 
        }
        else {
           $this->$method();
        }
    }

但$ this-> $ method()没有收到在网址中发送的参数。怎么办? 我想仅对登录用户进行一些操作。

3 个答案:

答案 0 :(得分:2)

理想情况下,您不应该使用此开发模式来创建用户登录。您只需在您正在调用的类的构造函数中进行检查,并使用$ this-> router->方法查看用户尝试访问的方法。检查是否需要登录的方法数组,然后检查用户是否登录。如果其中一个条件为false,则重定向到登录页面,否则继续执行该调用。下面的示例实现:

Class XYZ extends Controller{

    function __construct() {
        parent::controller();
        $protected_methods = array('method_1', 'method_2');

        if(in_array($this->router->method, $protected_methods)){
            // check if user is logged in
            if(!$this->session->userdata('logged_in'))
                redirect('/login');
        }
    }

}

答案 1 :(得分:2)

要限制整个控制器的登录用户,请使用以下内容:

function __construct(){

  if(!is_logged_in){
    redirect('user/login');
  }

}

如果您需要限制特定方法,请执行相同的操作:

function restricted_function(){

   if(!is_logged_in){
     redirect('user/login');
   }

 }

这要求在调用控制器之前设置is_logged_in变量。

我使用一个MY_controller来检查所有控制器继承的登录会话。

答案 2 :(得分:1)

您没有向其发送任何参数。

您应该提供需要$ method进行评估的所有参数。

function _remap($method)
{
    $restricted = array('update_rating', 'delete_post');
    if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
    {
       echo 'Log in, please'; 
    }
    else
    {
        $params = get_func_get_args();
        $this->$method($params);
    }
}

请注意,这些方法现在将接收参数数组。