Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87218
  • 博文数量: 38
  • 博客积分: 350
  • 博客等级: 一等列兵
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 09:14
个人简介

每一种技术都有其诱人之处。

文章分类

全部博文(38)

文章存档

2016年(2)

2014年(23)

2011年(13)

我的朋友

分类: PHP

2014-07-03 15:56:26

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) |
给主人留下些什么吧!~~