2

我已经安装了 CakeDC 用户插件,我发现默认情况roleis_admin不工作。如果我使用常规用户名role=registeredis_admin=登录0,我仍然可以访问/admin/users/add/. 为什么有两种类型的检查,roleand is_admin,如果role=administratoris_admin=0怎么办,反之亦然?

我正在寻找此问题的首选解决方案,以便我可以保护管理部分并在不同页面上使用用户角色。尽管如此,还是不​​明白为什么is_admin会出现,什么时候role=administrator可以解决这一切。

4

2 回答 2

4

我通过在方法“beforeFilter()”的“app/Controller/AppController.php”中添加以下代码解决了同样的问题:

    if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
        if ($this->Session->check('Auth.User.role') and 'admin' !== $this->Session->read('Auth.User.role')) {
            $this->Auth->deny('*');
            return $this->flash('Non admin access unauthorized', '/');
        }
    } 

虽然我承认这个解决方案不是最优的,但它确实可以解决问题!

于 2013-05-26T18:43:31.860 回答
3

不是插件的问题:您必须自己实现您的身份验证应用程序。该插件只是为您提供基础知识,但不会根据您的客户要求定制应用程序。我推荐你阅读本章http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

is_admin 检查 AND 角色字段的存在有多种原因:您的用户可以拥有任何角色,但只有当他们检查了 is_admin 时,他们才能访问管理区域。is_admin 单独不允许您拥有角色。这两个领域都是为了涵盖不同的场景。同样,该插件被认为是您可以构建的启动和基础。这就是您想要自定义它时必须做的事情。

有一个示例几乎可以说明如何使用您需要的任何东西:

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-controllerauthorize

class AppController extends Controller {
public $components = array(
    'Auth' => array('authorize' => 'Controller'),
);
public function isAuthorized($user = null) {
    // Any registered user can access public functions
    if (empty($this->request->params['admin'])) {
        return true;
    }

    // Only admins can access admin functions
    if (isset($this->request->params['admin'])) {
        return (bool)($user['role'] === 'admin');
    }

    // Default deny
    return false;
}

}

于 2013-05-26T19:28:01.550 回答