0

我正在尝试编写一些简单的功能来区分我正在编写的 CakePHP 应用程序中的管理员和普通用户。我已将users表格更改为有一个名为adminor0的字段1

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. 当我转到那个页面时,我没有得到无限的重定向,并且adminecho像它应该的那样被淘汰。

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

4

1 回答 1

0

Sixthpoint 已经指出了这一点。

在没有 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 结合的角色来完成相同的任务。

于 2013-03-09T04:04:56.077 回答