0

我正在 Codeigniter 中构建我的第一个项目,使用Tank_auth来处理我的 CMS 身份验证。

它工作正常,但我对最佳实践有疑问。目前,每个控制器中的每个函数都具有以下结构:

public function add()
    {
        if ($this->tank_auth->is_logged_in())
        {

            $data['stuff'] = 'stuff';

            $this->load->view('admin/cms_add',$data);


        } else
        {
            redirect('/admin/login/');  
        }
    }

有很多控制器,每个控制器都有一些功能,它开始变得重复,我想知道这是否是正确的方法,或者是否有一种更清洁的方法来确保未登录的用户无法访问这些功能。

提前致谢。

4

2 回答 2

1

如果every method in every controller要检查用户是否登录,您可以使用__construct()每个控制器中的方法如下:

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

    if (! $this->tank_auth->is_logged_in()) {
        redirect('/admin/login/');
    }
}

您还可以扩展 CI 控制器并创建自定义MY_Controller并检查内部的 if 语句。那么控制器只接受登录用户,应该继承My_Controller

application/core/MY_Controller.php

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        // Execute CI_Controller Constructor
        parent::__construct();

        if (! $this->tank_auth->is_logged_in()) {
            redirect('/admin/login/');
        }
    }
}

application/controllers/welcome.php

class Welcome extends MY_Controller {

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

    function index()
    {
        $this->load->view('welcome_message');
    }
}

查看CI 用户指南了解更多信息。

于 2013-08-07T10:58:02.840 回答
0

我也这样做了。没有更好的方法,因为您可以拥有对未登录用户可见的控制器,您不能将其添加到构造函数或其他东西。

最好的,我认为最干净的方法是将它添加到每个功能标准中。这样,如果您想让每个人都公开该控制器功能,您始终可以对其进行编辑。

任何人都不允许使用的功能可以设置为私有。

private function add()
    { 
         // do private stuff
    }

所以你最好使用你当前的代码:)

于 2013-08-07T10:48:01.573 回答