1. 首先建ACL 三个关联表aros,acos,aros_acos
aros (access request object) :发起访问对象表
acos (access control object) : 访问控制对象表
aros_acos :访问规则表
Console\cake schema create DbAcl 命令可创建三个表。
或者直接mysql load script “app/Config/Schema/db_acl.sql”
2. aros 表数据修改
如果用户是分组的(对应Group模块),且ACL只以组别来区分访问权限,
那么在GroupContoller中enable acL request:
public $actsAs = array('Acl' => array('type' => 'requester','enable' => true));
在UserController中disable acl request:
public $actsAs = array('Acl' => array('type' => 'requester','enable' => false));
此时,如果使用GroupController::add ,则aros 表也会插入新建group记录。
3. acos 初始化或更新
database 中删除所有acos记录.
Console\cake acl create aco root controllers 命令插入第一条记录,即root 别名是controllers.
Console\cake AclExtras.AclExtras aco_sync,使用AclExtras 插件更新server端所有controller 和action作为访问控制的对象
4. 更新aros_acos 表
首先在UserController中加入访问控制规则,假设放在initDb action中,
$this->Acl->allow($group,'controllers');//此group具有root权限,可访问所有对象
$this->Acl->deny($group,'controllers');//此group没有有root权限
$this->Acl->deny($group,'controllers/module');//此group 没有访问module模块的权限
$this->Acl->allow($group,'controllers/module/index');//此group 具有访问module::index的权限
...
database 删除所有aros_acos中记录
web client 访问/users/initDb ,此时server即可更新aros_acos表。
若无法访问/users/initDb ,则可以在UserController::beforeFilter中开发访问: $this->Auth->allow('initDb');
注:Module::beforeFilter 优先级高于ACL控制。
阅读(794) | 评论(0) | 转发(0) |