Мне просто нужны разрешения только для группы - мне не нужны разрешения на основе пользователей. В руководстве по Cake 1.3 (http://book.cakephp.org/view/1646/x11-2-4-1-Group-only-ACL) говорится:
Если нам нужны упрощенные разрешения для каждой группы, нам нужно реализовать bindNode () в модели User.
function bindNode($user) {
return array('Group' => array('id' => $user['User']['group_id']));
}
Этот метод скажет ACL пропустить проверку User Aro и проверять только Group 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));
}
}
}