我只想要群组权限 - 我不需要基于用户的权限。蛋糕1.3手册(http://book.cakephp.org/view/1646/x11-2-4-1-Group-only-ACL)说:
如果我们想要简化的每组 只有权限,我们需要实现 用户模型中的bindNode()。
function bindNode($user) {
return array('Group' => array('id' => $user['User']['group_id']));
}
此方法将告诉ACL跳过 检查用户Aro并仅检查 Aro集团。
然而,当我通过烘焙控制器添加组和用户时,我仍然最终得到一个带有嵌套组/用户的ARO表,用于基于用户的权限。我希望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));
}
}
}
答案 0 :(得分:3)
好。我假设你有一个Groups模型/表,它也包含
var $actsAs = array('Acl' => array('type' => 'requester'));
这就是您的ARO表包含两个实例的原因。绑定让您更改分配了特定模型的ARO树的节点。文档中描述的解决方案意味着如果使用ACL->check()
检查模型,则使用新绑定的ARO节点。
您还在User
模型的父节点中分配组ID,即您按照原样构建ARO树。我假设为了实现您的解决方案,只需删除用户模型中的acts_as
和parent_node
声明即可。
要检查权限,您只需使用User
模型即可。
希望这可以解决一些问题。我刚开始进入ACL
因此,我可能误解了bind
行为中的某些内容。你可以看看是否有帮助。
答案 1 :(得分:0)
问题是您仍然包含数据库中的旧信息。
如果清空所有表,包括aros,acos和aros_acos,再添加创建组和用户,您将获得记录的输出。
答案 2 :(得分:-1)
我从未使用过那种方法,但没有任何用户的群体概念似乎毫无意义。 Cake使用用户和组信息来决定谁属于哪个组,以便它可以应用适当的组权限。
查看“本书”,您的用户必须设置了group_id:
“每个用户都必须已分配 group_id为此工作。“
CREATE TABLE users (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password CHAR(40) NOT NULL,
group_id INT(11) NOT NULL,
created DATETIME,
modified DATETIME
);
在我的应用程序中,不使用bindNode
,我只按组设置权限,它可以正常工作。