2

我正在使用 codeigniter 编写一个 Web 应用程序。
我想在我们的用户访问页面之前验证他们的权限。
实际上除了登录页面几乎所有的控制器动作都需要调用模型并使用

$this->Users->validate($username, $password)

我想让它适用于每个控制器。我需要继承控制器类吗?我怎么能这样做?

4

4 回答 4

13

我们有一个使用 Codeigniter 的项目以及我们的做法:

当你有一个新的控制器时:

class xxxx extends MY_Controller { }

在 MY_Controller 类里面

function __construct() {
 // do your validations
}
于 2013-03-13T10:58:32.057 回答
2

最好的方法是您应该在 application/helper 文件夹中使用此名称或任何您想要但不要删除_helper的帮助文件,您应该使用此名称authentication_helper,并将以下代码作为您的

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    function varify_session(){
       $CI = &get_instance();
       $user_session_id = $CI->session->userdata('logged_in');

       if($user_session_id  ==  '') {
        redirect('login');
       }
   }
   ?>  

用你的代码修改代码。然后在您的自动加载文件中并将其放入帮助程序中

     $autoload['helper'] = array('authentication');

然后你只需要像这样将这一行放入你的每个控制器构造函数中

     function __construct()
     {
         parent::__construct();
         varify_session();  
     }

希望它会有所帮助。

于 2013-03-13T14:49:25.680 回答
1

请在每个控制器的构造函数中编写以下代码

$this->load->library(‘session’);
$this->load->model(‘login_model’,'login’,TRUE);

/* check whether login or not */
if(!$this->login->check_session()){
redirect(‘/login’);
}
于 2013-03-13T11:14:49.867 回答
0

过滤器使用前更正:

class Test extends Controller {

    var $before_filter = array();

    var $after_filter = array();

    function __construct() {
        parent::Controller();

        $this->before_filter[] = array(
            'action' => 'before_filter_run',
        );

    }

    function before_filter_run() {
        // Auth here
    }
}    

有关详细信息,请阅读此处

于 2013-03-13T10:58:15.013 回答