在配置 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 只包含来自用户模型本身的直接数据,而不是相关的权限。
我只是犯了一个小错误,还是我完全错误地理解了“包含”索引的目的/功能?