0

在配置 cakephp 的 Auth-Component 时,我在使用 'contain'-index 时遇到问题(在此处描述) ...

我想要实现的是基于权限的授权(而不是像“管理员”、“用户”等角色)。因此,停留在常用的博客示例中,我有一个表“权限”,其中可能包含字段 id 和 name 并包含条目:

1: editOwnPosts
2: editAllPosts

这些权利与用户相关联,如下所示:

/*
 * Model/User.php:
 */
public $hasAndBelongsToMany = array(
    'Right' => array(
        'className' => 'Right',
        'joinTable' => 'rights_users',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'right_id',
    )
);

/*
 * Model/Right.php:
 */

public $hasAndBelongsToMany = array(
    'User' => array(
        'className' => 'User',
        'joinTable' => 'rights_users',
        'foreignKey' => 'right_id',
        'associationForeignKey' => 'user_id',
    )
);

现在对于每个授权,我都需要用户的权限。因此,例如,如果他尝试编辑帖子,我会检查用户的权限数组是否包含值“editAllPost”。如果是,我的授权函数返回 true。否则,它会检查它是否包含“editOwnPosts”,如果 Post 是用户的,则返回 true,否则返回 false。

好吧,我在这个问题的答案中找到了我认为的解决方案:使用 cakephp 2.2 中引入的 'contain'-Key。所以我在 AppController.php 中写道:

public $components = array(
    'Auth' => array(
        ...,
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'User',
                'fields'    => array('username' => 'mail'),
                'contain'   => array('Right')
            ),
        ),
        'authorize'     => array('Controller')
); 

并测试它是否在做我想做的事,也在 AppController.php 中:

public function isAuthorized($user) {
    var_dump($this->Auth->user());
    return true;
}

但是我在任何页面上看到的 var_dump 只包含来自用户模型本身的直接数据,而不是相关的权限。

我只是犯了一个小错误,还是我完全错误地理解了“包含”索引的目的/功能?

4

2 回答 2

0

I had the same problem today. This is due to the fact, that the authenticated user is stored in the session. When you log in our user his/her information are stored within the session.

so, if you want to add an additional contain to your user, you have to ensure to log out all users from your app. after logging in again, the new contained model association is available via $this->Auth->user('ContainModel.fieldname').

于 2014-10-02T14:34:42.963 回答
0

您是否为清理模型缓存设置了 debug =2?

于 2013-09-09T13:39:00.010 回答