我只想组只有权限 - 我不需要基于用户的权限。蛋糕1.3手动(http://book.cakephp.org/view/1646/x11-2-4-1-Group-only-ACL)说:CakePHP ACL - 如何获取仅限组的权限?
在情况下,我们要简化每组 只有权限,我们需要在用户模型中实现 bindNode()。
function bindNode($user) {
return array('Group' => array('id' => $user['User']['group_id']));
}
这个方法会告诉ACL跳过 检查用户阿罗的和只检查 集团阿罗的。
但是,当我通过烘焙的控制器添加组和用户时,我仍然会得到一个带有嵌套组/用户的AROs表以获得基于用户的权限。我预期的ARO表看起来像这样(因为手册上说,这是它的样子):
+----+-----------+-------+-------------+-------+------+------+
| id | parent_id | model | foreign_key | alias | lft | rght |
+----+-----------+-------+-------------+-------+------+------+
| 1 | NULL | Group | 1 | NULL | 1 | 2 |
| 2 | NULL | Group | 2 | NULL | 3 | 4 |
| 3 | NULL | Group | 3 | NULL | 5 | 6 |
+----+-----------+-------+-------------+-------+------+------+
但是,相反的是这样的:
+----+-----------+-------+-------------+-------+------+------+
| id | parent_id | model | foreign_key | alias | lft | rght |
+----+-----------+-------+-------------+-------+------+------+
| 1 | NULL | Group | 1 | NULL | 1 | 4 |
| 2 | NULL | Group | 2 | NULL | 5 | 8 |
| 3 | NULL | Group | 3 | NULL | 9 | 12 |
| 4 | 1 | User | 1 | NULL | 2 | 3 |
| 5 | 2 | User | 2 | NULL | 6 | 7 |
| 6 | 3 | User | 3 | NULL | 10 | 11 |
+----+-----------+-------+-------------+-------+------+------+
这里是我的用户模型:
class User extends AppModel {
var $name = 'User';
var $actsAs = array('Acl' => array('type' => 'requester'));
var $hasMany = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'user_id'
)
);
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id'
)
);
/**
*
* In case we want simplified per-group only permissions
* see http://book.cakephp.org/view/1547/Acts-As-a-Requester
* @param unknown_type $user
*/
function bindNode($user) {
return array('Group' => array('id' => $user['User']['group_id']));
}
function parentNode() {
if (!$this->id && empty($this->data)) {
return null;
}
if (isset($this->data['User']['group_id'])) {
$groupId = $this->data['User']['group_id'];
} else {
$groupId = $this->field('group_id');
}
if (!$groupId) {
return null;
} else {
return array('Group' => array('id' => $groupId));
}
}
}
是的,“每个用户都必须分配group_id才能工作” - 那么为什么书中只显示其中只有组的结果ARO表? – Owen 2010-10-23 15:12:17
我不知道这个答案。这是我没有意识到的一种选择,可能是这本书是正确的,但你的实现不是。我的读书是使用bindNode修改逻辑而不是模型,因此,你的实现是正确的,这本书是错误的。这很好,但任何人都可以编辑它。我注意到有一天Containable部分消失了。或者也许它从来没有! – Leo 2010-10-23 20:57:35
我越使用CakePHP,我越喜欢它,但经常需要使用文档:) – Owen 2010-10-23 22:29:20