【问题标题】:What is a good technique to prevent unauthenticated users from accessing controller methods?什么是防止未经身份验证的用户访问控制器方法的好技术?
【发布时间】:2013-08-05 05:10:27
【问题描述】:

我有一个事件控制器:

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。但是它很快就被弄脏了,并且不容易更新或修改控制器(而且它很乱,似乎没有遵循良好的编程礼仪)。

【问题讨论】:

标签: php codeigniter access-control


【解决方案1】:

我通常使用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 中是这样的:

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

                                );

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

【讨论】:

    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 2019-08-02
    • 2015-01-13
    • 2016-10-01
    • 1970-01-01
    • 2014-04-27
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多