我在使用ACL时遇到问题。在我的CoreUsersController中,我进行以下调用:
if(!$this->Acl->check('User::'.$user['User']['id'], 'CoreUser', 'read')) {
die('PERM DENIED');
}
ACL包含在AppController中作为组件。数据库表看起来像:
以下是错误投放: 错误:在数据源默认值中找不到模型Aro的表aros。
我的代码:
1。用户 - 型号:
App::uses('AuthComponent', 'Controller/Component');
class CoreUser extends AppModel {
public $useDbConfig = 'default';
public $useTable = 'core_users';
public $hasAndBelongsToMany = array(
'MemberOf' => array(
'className' => 'CoreGroup',
'joinTable' => 'core_users_groups',
'foreignKey' => 'user_id',
'associationForeignKey' => 'group_id'
)
);
public $name = 'User';
public $actsAs = array('Acl' => array('type' => 'both'));
public function parentNode() {
// stuff in here should be correct
}
}
2。基 - 型号:
App::uses('AppModel', 'Model');
App::uses('AuthComponent', 'Controller/Component');
class CoreGroup extends AppModel {
public $useDbConfig = 'default';
public $useTable = 'core_groups';
public $hasAndBelongsToMany = array(
'Member' => array(
'className' => 'CoreUser',
'joinTable' => 'core_users_groups',
'foreignKey' => 'group_id',
'associationForeignKey' => 'user_id'
)
);
public $name = 'Group';
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
return null;
}
}
我的问题:如何告诉ACL使用“core_groups”-Table而不是“aros”-table?注意:我将Cake-Book建议的“ActsAs”添加到两个模型中!
答案 0 :(得分:1)
如果您想继续使用Cake的ACL,那么最好有三个单独的表:
1. aros
2. acos
3. aros_acos
可以使用AclShell生成这些:
./Console/cake schema create DbAcl
不建议将您的某个应用模型用作ARO或ACO,因为ARO和ACO模型是以树形结构实现的。这些应该与您的应用中的“作为ACO / ARO”的模型分开。
当您将$actsAs
属性中的Acl行为附加到您的用户/组模型时,Acl行为的回调就会启动。这些回调会使用您的用户/组模型中定义的parentNode()
方法来创建对用户/组模型中创建的行的ARO 引用。这些引用分别存储在ARO 表中,指向实际的用户和组。因此,ARO表是必要的。
我建议你仔细阅读本书中的the ACL tutorial,因为你的实现非常相似。请注意使用用户和组之间的HABTM关系,因为这需要稍微调整。