什么是防止未经身份验证的用户访问控制器方法的好方法?

时间:2013-03-25 18:38:44

标签: php codeigniter access-control

我有一个事件控制器:

class Event extends CI_Controller{

   public function index(){
   }

   public function foo(){
   }

   //Shouldn't be able to use this method unless logged in
   public function bar(){
   }


}

我正在尝试组织我的代码,因此它非常整洁和直接。刚才我有一个名为MY_Controller的控制器,这样只有经过身份验证的用户才能访问扩展它的任何控制器的方法(edit_event(),add_event())。

但是,我的控制器中的某些方法需要由未经身份验证的用户访问(例如get_event())。

处理此问题的好方法是什么?我应该创建两个完全独立的控制器,还是从基本事件控制器扩展并添加经过验证的方法?

以前我有一个管理器控制器,它处理所有需要身份验证的方法,例如add_user,delete_user,add_doc,delete_doc。但它变得非常快速印迹,并且不容易更新或修改控制器(加上它很乱,似乎没有遵循良好的编程礼仪)。

1 个答案:

答案 0 :(得分:0)

通常我使用hooks

了解他们。

例如我创建了一个url_hook.php,如果用户允许uri,它会在每次页面加载时控制:

class url_hook{

function allowed_urls(){

$allow = array('login','logout','search');

if(in_array($allow,$this->uri->segment(2)) && $this->session->userdata('user_id')){

 //ok user allowed

return true;

}else{

//user not allowed

 redirect();

}   }  }

然后在config/config.php我做:

$config['enable_hooks'] = TRUE;

并在config/hooks.php像这样的somenthing:

 $hook['pre_controller'][] = array(
                                'class'    => 'url_hook',
                                'function' => 'allowed_urls',
                                'filename' => 'url_hook.php',
                                'filepath' => 'hooks'

                                );

每次在您的应用中调用网址时,所有这些都会自动运行