2

我有一组控制器,只有当您是管理员(而不是普通用户)时才能访问。

因此,在每个控制器的构造函数中,我会这样做:

public function __construct() {
    parent::__construct();
    if (! is_admin()) {
         show_404();
    }
}

除了将此代码添加到每个 Admin Controller 的构造函数中,还有更好的方法吗?

我在想我可以创建一个名为的 Base 控制器Admin_Controller,如下所示:

public class Admin_Controller extends CI_Controller {

    public function __construct() {
         //the above code goes here
    }
}

然后我所有的其他控制器都可以扩展这个类,而不是这个CI_Controller类。唯一的问题是,我需要将此文件包含在其他控制器的顶部,否则 CodeIgniter 找不到Admin_Controller.

有一个更好的方法吗?

4

2 回答 2

4

将它放在您的应用程序/核心文件夹中:MY_Controller.php (注意正确使用大写字母)

class MY_Controller extends CI_Controller
{
public function __construct() 
{
     parent::__construct();
     if (! is_admin())
     {
          show_404();
     }
} 

然后在您希望用户登录的所有普通控制器中

class Whatever extends MY_Controller
{
   public function __construct() 
    {
         parent::__construct();
    } 
}

请参阅此处有关扩展核心类的用户指南

于 2012-06-08T23:56:33.207 回答
2

我认为你可以使用Hooks 我做过同样的事情,但我需要更精确的控制,所以我必须检查每个控制器。并非所有控制器都禁止单个用户使用。

于 2012-06-08T23:22:30.940 回答