在CakePHP应用程序中授权管理员和常规用户

时间:2013-03-08 19:31:21

标签: php cakephp authentication roles

我正在尝试编写一些简单的功能来区分我正在编写的CakePHP应用程序中的管理员和常规用户。我已将users表格更改为名为admin的字段,该字段为01

AppController.php中,我设置了$components数组:

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Blowfish' => array(
                'fields' => array('username' => 'email')
            )
        ),
        'loginRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);

还有这种方法:

public function isAuthorized($user) {
    // Check if admin
    if(isset($this->params['admin']) && $this->Auth->user('admin') == 1) {
        echo "admin";
        return true;
    }

    // Default deny
    return false;
}

当我加载页面时,我收到此错误:(net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.。由于某种原因,上面的代码导致无限重定向,我无法解决原因。

此外,我为admin设置了路由前缀,以便管理员可以访问/admin/users/edit等网址。当我转到该页面时,我没有获得无限重定向,而admin echo就像它应该的那样。

我已经在线阅读了教程并阅读了Cake文档,但它们似乎都以无限重定向结束,我如何设置它以便我可以区分管理员和普通用户,并拒绝/允许访问某些每个角色的行动?

1 个答案:

答案 0 :(得分:0)

第六点已经指出了这一点。

如果没有Auth对象,Auth组件将重定向到Pages Controller,我认为您缺少

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow("*"); // * or array("actions", "that", "are", "allowed")
}

因此,这实质上是创建一个无限循环,缺少First Auth对象,它被定向到PagesController。 Auth组件已配置为授权所有控制器,包括PagesController。循环重复重定向到PagesController。

您是否尝试过调查ACL?您可以通过使用角色和ACL来实现相同目的。