【问题标题】:Authorizing administrators and regular users in a CakePHP application在 CakePHP 应用程序中授权管理员和普通用户
【发布时间】:2013-02-24 11:01:25
【问题描述】:

我正在尝试编写一些简单的功能来区分我正在编写的 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 这样的URL。当我转到该页面时,我没有得到无限重定向,adminecho 应该是这样。

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

【问题讨论】:

  • 你在使用 $this->Auth->allow();正确吗?要回答这个问题,请在您的 beforefilters 和路由规则中提供更多代码

标签: php cakephp authentication roles


【解决方案1】:

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 结合使用来完成同样的任务。

【讨论】:

  • 谢谢,我不知道如何正确使用allow(),加上我的isAuthorized() 方法中的“默认拒绝”造成了一些麻烦。我已经切换到在我的控制器中使用 beforeFilter() 以允许单独执行每个操作以进行更精细的控制,并且现在运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 2013-11-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多