CakePHP/MVC管理函数布局

CakePHP/MVC管理函数布局,php,cakephp,authorization,Php,Cakephp,Authorization,这是一个更多的意见问题,而不是一个具体问题的解决方案 我第一次与CakePHP合作,现在正在处理网站的管理部分 作为MVC或CakePHP开发人员,您希望将管理功能放在哪里 最初我将它们放在AdminController中,但后来改为将函数放在控制器中,该控制器用于处理的数据类型。例如,我将用户列表/编辑放在UserController中 对我来说,这更有意义,因为UserController中可能有一些有用的功能 如果你留下回复,你能留下几句话来说明原因吗?也许这是一个没有实际意义的观点 保重

这是一个更多的意见问题,而不是一个具体问题的解决方案

我第一次与CakePHP合作,现在正在处理网站的管理部分

作为MVC或CakePHP开发人员,您希望将管理功能放在哪里

最初我将它们放在AdminController中,但后来改为将函数放在控制器中,该控制器用于处理的数据类型。例如,我将用户列表/编辑放在UserController中

对我来说,这更有意义,因为UserController中可能有一些有用的功能

如果你留下回复,你能留下几句话来说明原因吗?也许这是一个没有实际意义的观点

保重,, 背风

--编辑


我不认为这是一个毫无意义的问题。将管理功能放在各自的控制器中(即,不是全部放在一个“管理”控制器中),并使用内置在Cake中的“管理”前缀路由来确保它们的安全。这是CakePHP认可的方法,CakePHP允许您通过Bake控制台以这种方式创建管理函数

您可以在AppController中使用几行简单的代码来保护以admin_uu为前缀的所有控制器功能,并且可以通过整洁一致的URL访问所有管理功能,如下所示:

这应该让你开始:

如果你需要更多帮助,请告诉我,我会用更多信息更新我的答案

编辑:更多信息

以下是设置管理员路由的一些步骤:

1/在app/Config/core.php中,第113行附近,确保此行存在且未注释:

    Configure::write('Routing.prefixes', array('admin'));
2/在app/Controller/AppController.php(即控制器超类)中,在beforeFilter方法中测试管理员路由。不要在每个控制器的beforeFilter中执行此操作-这与DRY原则不一致。以下是我的before filter方法示例:

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
            // the user has accessed an admin function, so handle it accordingly.
        $this->layout = 'admin';
        $this->Auth->loginRedirect = array('controller'=>'users','action'=>'index');
        $this->Auth->allow('login');
    } else {
            // the user has accessed a NON-admin function, so handle it accordingly.
        $this->Auth->allow();

    }
}
3/使用admin_uu为所有管理功能添加前缀,这些功能应通过前缀路由自动可用

例如

一旦你设置好了,你所需要做的就是在admin函数前面加上admin,Cake会帮你处理所有的事情。有道理吗

编辑2:

下面是一些快速编写的示例代码,应该对您的情况有所帮助

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
        // the user has accessed an admin_ function, so check if they are an admin.
        if ($this->Auth->user('user_type') == 1){
            // an Admin user has accessed an admin function. We can always allow that.
            $this->Auth->allow();
        } else {
            // A non-admin user has accessed an admin function, so we shouldn't allow it.
            // Here you can redirect them, or give an error message, or something
        }
    } else {
        // the user has accessed a NON-admin function, so handle it however you want.
        $this->Auth->allow(); // this example gives public access to all non-admin functions.
    }
}

我不认为这是一个毫无意义的问题。将管理功能放在各自的控制器中(即,不是全部放在一个“管理”控制器中),并使用内置在Cake中的“管理”前缀路由来确保它们的安全。这是CakePHP认可的方法,CakePHP允许您通过Bake控制台以这种方式创建管理函数

您可以在AppController中使用几行简单的代码来保护以admin_uu为前缀的所有控制器功能,并且可以通过整洁一致的URL访问所有管理功能,如下所示:

这应该让你开始:

如果你需要更多帮助,请告诉我,我会用更多信息更新我的答案

编辑:更多信息

以下是设置管理员路由的一些步骤:

1/在app/Config/core.php中,第113行附近,确保此行存在且未注释:

    Configure::write('Routing.prefixes', array('admin'));
2/在app/Controller/AppController.php(即控制器超类)中,在beforeFilter方法中测试管理员路由。不要在每个控制器的beforeFilter中执行此操作-这与DRY原则不一致。以下是我的before filter方法示例:

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
            // the user has accessed an admin function, so handle it accordingly.
        $this->layout = 'admin';
        $this->Auth->loginRedirect = array('controller'=>'users','action'=>'index');
        $this->Auth->allow('login');
    } else {
            // the user has accessed a NON-admin function, so handle it accordingly.
        $this->Auth->allow();

    }
}
3/使用admin_uu为所有管理功能添加前缀,这些功能应通过前缀路由自动可用

例如

一旦你设置好了,你所需要做的就是在admin函数前面加上admin,Cake会帮你处理所有的事情。有道理吗

编辑2:

下面是一些快速编写的示例代码,应该对您的情况有所帮助

function beforeFilter() {
    if (isset($this->request->params['admin'])) {
        // the user has accessed an admin_ function, so check if they are an admin.
        if ($this->Auth->user('user_type') == 1){
            // an Admin user has accessed an admin function. We can always allow that.
            $this->Auth->allow();
        } else {
            // A non-admin user has accessed an admin function, so we shouldn't allow it.
            // Here you can redirect them, or give an error message, or something
        }
    } else {
        // the user has accessed a NON-admin function, so handle it however you want.
        $this->Auth->allow(); // this example gives public access to all non-admin functions.
    }
}

你好谢谢CakePHP很大,像这样的事情似乎是你必须被告知或偶然发现的。我不确定前缀比我目前的系统有什么好处;现在,我有一个admin用户类型,并在每个具有admin函数的控制器的BeforeFilter()开头对其进行测试。似乎即使有前缀,我仍然需要做同样的检查。唯一的区别是URL和函数名中都添加了“admin”我完全明白你对偶然发现/被告知的情况的意思。蛋糕的学习曲线有点陡峭,但很值得。我已经用更多信息更新了我的答案。如果你需要更多的帮助,请告诉我。谢谢你一直以来的帮助。从您的示例来看,如果某人试图访问管理区域,您所做的只是重定向他们登录。在我的系统中,用户已经登录,系统知道他们是管理员用户。现在,在每个具有管理函数的控制器中,它检查BeforeFilter()以查看是否应该有Auth->allow()。如果用户是管理员,是否有办法对所有以“admin_”开头的函数进行宽泛的考虑?能否在原始问题中粘贴一些来自Prefore筛选器的示例代码?请参见我答案中的编辑2。我写得很快,但我认为它应该起作用,或者让你走上正轨。你好。谢谢CakePHP很大,像这样的事情似乎是你必须被告知或偶然发现的。我不确定前缀比我目前的系统有什么好处;现在,我有一个admin用户类型,并在每个具有admin函数的控制器的BeforeFilter()开头对其进行测试。似乎即使有前缀,我仍然需要做同样的检查。唯一的区别是URL和函数名中都添加了“admin”我完全明白你对偶然发现/被告知的情况的意思。蛋糕的学习曲线有点陡峭,但很值得。我已经用更多信息更新了我的答案。如果你需要更多的帮助,请告诉我。谢谢你一直以来的帮助。从你的例子来看,这似乎就是你所做的一切