CakePHP:你可以在页面上使用admin前缀吗?

时间:2013-04-25 22:48:14

标签: php cakephp authorization cakephp-2.0 cakephp-2.3

在我的控制器中,我通过在admin_前面加上函数来限制访问,然后让AppController isAuthorized()函数检查用户是否是管理员。有没有办法用页面(来自PageController)来做到这一点?我们创建了一个管理员主页(如仪表板),用户无法查看他们是否未登录,但非管理员用户可以查看。我无法弄清楚如何防止这种情况。

2 个答案:

答案 0 :(得分:1)

你对网页的意思是什么?由您的webroot中的PagesController .htm(l)文件提供的静态内容?

如果你的情况是第一件事,你可以为Pages Controller实现这个逻辑。 如果它是第二个 - 请求根本不通过CakePHP(或任何其他服务器端脚本),所以不能通过Cake控制对它的访问。

如果您的情况不同,请完善您的问题,我很乐意为您提供帮助。

正如评论所暗示你处于No:1的情况。在PagesController的类声明中,它说:

class PagesController extends AppController {

这意味着您可以在AppController中使用任何扩展AppController的类中的任何逻辑。因此,您可以在PagesController中使用isAuthorized()

您需要做的就是创建一个名称与“管理仪表板视图”相同的方法,并且只允许管理员访问它。或者只是检查用户角色。

答案 1 :(得分:1)

假设第一个参数是请求的页面,您可以使用以下语句捕获它:

$this->request->pass[0];

你可以使用isAuthorized函数来解决你做这样的问题......

public function isAuthorized()
{
    $page = strtolower($this->request->pass[0]);

    if ($page = 'admin_page')
    {
         if ( $this->Auth->user('Role.role_field') == 'Admin' )
         {
            return TRUE;
         }
         else
         {
            return FALSE;
         }
    }
    else
    {
         // This will authorize users for the other pages
         return TRUE;
    }
}

希望这会有所帮助。总是检查CookBook:有时您需要检查旧书籍以找到您真正需要的内容。快乐的编码!