ZendFramework学习第三章(核心组件—ACL高级用法之精细访问控制、移除控制规则)
2012-11-15 15:49
495 查看
啊!哈!咳!今天继续我们的ZF之旅。今天给大家将ACL的高级用法中的精细访问和移除控制规则,上一节是基本的介绍的ACL是对指定用户访问所有资源时设定的权限,这种设定并不一定能够满足实际应用的需要。例如,论坛中可能会有某个专区,只允许固定的用户发帖子,此时就要将涉及指定资源访问控制问题。
要为指定用户添加对指定资源的某种操作的允许或者拒绝权限时,只需要使用allow()或者deny()方法的第二个参数即可。这两种方法的第二个参数都表示相应的Resource(资源)类型,可以为Zend_Acl_Resource类的实例、字符串或者数组。
下边给大家一段我测试过的例子,例子是我经过测试后copy上来的,假设一个论坛包括3个大区,分别为娱乐区、技术区与管理区,不同的用户对各帖子访问的规则如下表:
测试代码(写到了控制器方法里):
$acl=new Zend_Acl();
//创建资源
$resouRelax=new Zend_Acl_Resource('relax'); //创建资源娱乐
$resouTech=new Zend_Acl_Resource('tech'); //创建资源技术
$resouAdmin=new Zend_Acl_Resource('admin'); //创建资源管理
$acl->add($resouRelax); //将资源添加到访问控制列表中
$acl->add($resouTech);
$acl->add($resouAdmin);
$roleGuest=new Zend_Acl_Role('guest'); //创建角色guest
$acl->addRole($roleGuest); //添加角色guest到访问控制列表
$acl->allow($roleGuest,$resouRelax,'view'); ///为guest添加在娱乐区的浏览权限
$acl->addRole(new Zend_Acl_Role('user'),$roleGuest); //创建user并继承guest,添加到user到访问控制列表
$acl->allow('user',null,array('view','create','edit')); //给user角色在所有资源中添加浏览、发表以及编辑
$acl->deny('user',$resouAdmin,array('create','edit')); //拒绝user在管理区发表、编辑
$acl->addRole(new Zend_Acl_Role('moder'),'user'); //创建moder并继承user,添加moder到访问控制列表
$acl->allow('moder',null,'delete'); //允许moder在所有资源进行删除
$acl->deny('moder',$resouAdmin,'delete'); //拒绝moder删除管理资源内容
$acl->addRole(new Zend_Acl_Role('administrator')); //创建administrator角色添加到访问控制列表,没有任何继承
$acl->allow('administrator'); //允许administrator的在所有资源的所有权限
$acl->removeDeny($roleGuest,$resouTech,'view'); //移除guest用户对技术资源的不能浏览权限,也就是允许guest对技术区有浏览权限
$acl->removeAllow('user',$resouTech,'edit'); //移除user对技术去的编辑权限,是user对技术区没有编辑权限
if ($acl->isAllowed($roleGuest,$resouRelax,'view'));
{
echo "guest 有娱乐区的浏览权限!";
}
也可以移除控制规则,也就是移除角色对指定资源的允许权限或禁止权限。上边的代码中的:
$acl->removeDeny($roleGuest,$resouTech,'view'); //移除guest用户对技术资源的不能浏览权限,也就是允许guest对技术区有浏览权限
$acl->removeAllow('user',$resouTech,'edit'); //移除user对技术去的编辑权限,是user对技术区没有编辑权限
这两段代码正是此意~!很简单我就不过多解释了~!
要为指定用户添加对指定资源的某种操作的允许或者拒绝权限时,只需要使用allow()或者deny()方法的第二个参数即可。这两种方法的第二个参数都表示相应的Resource(资源)类型,可以为Zend_Acl_Resource类的实例、字符串或者数组。
下边给大家一段我测试过的例子,例子是我经过测试后copy上来的,假设一个论坛包括3个大区,分别为娱乐区、技术区与管理区,不同的用户对各帖子访问的规则如下表:
用户角色 | 大区 | 浏览 | 发表 | 编辑 | 删除 | 其他 | 继承关系 |
Guest | 娱乐区 | allow | deny | deny | deny | deny | 无 |
技术区 | deny | deny | deny | deny | |||
管理区 | deny | deny | deny | deny | |||
User | 娱乐区 | allow | allow | allow | deny | deny | 从Guest继承 |
技术区 | allow | allow | allow | deny | |||
管理区 | allow | deny | deny | deny | |||
Moder | 娱乐区 | allow | allow | allow | allow | deny | 从User继承 |
技术区 | allow | allow | allow | allow | |||
管理区 | allow | allow | allow | deny | |||
Administrator | 娱乐区 | allow | allow | allow | allow | allow | 无 |
技术区 | |||||||
管理区 |
$acl=new Zend_Acl();
//创建资源
$resouRelax=new Zend_Acl_Resource('relax'); //创建资源娱乐
$resouTech=new Zend_Acl_Resource('tech'); //创建资源技术
$resouAdmin=new Zend_Acl_Resource('admin'); //创建资源管理
$acl->add($resouRelax); //将资源添加到访问控制列表中
$acl->add($resouTech);
$acl->add($resouAdmin);
$roleGuest=new Zend_Acl_Role('guest'); //创建角色guest
$acl->addRole($roleGuest); //添加角色guest到访问控制列表
$acl->allow($roleGuest,$resouRelax,'view'); ///为guest添加在娱乐区的浏览权限
$acl->addRole(new Zend_Acl_Role('user'),$roleGuest); //创建user并继承guest,添加到user到访问控制列表
$acl->allow('user',null,array('view','create','edit')); //给user角色在所有资源中添加浏览、发表以及编辑
$acl->deny('user',$resouAdmin,array('create','edit')); //拒绝user在管理区发表、编辑
$acl->addRole(new Zend_Acl_Role('moder'),'user'); //创建moder并继承user,添加moder到访问控制列表
$acl->allow('moder',null,'delete'); //允许moder在所有资源进行删除
$acl->deny('moder',$resouAdmin,'delete'); //拒绝moder删除管理资源内容
$acl->addRole(new Zend_Acl_Role('administrator')); //创建administrator角色添加到访问控制列表,没有任何继承
$acl->allow('administrator'); //允许administrator的在所有资源的所有权限
$acl->removeDeny($roleGuest,$resouTech,'view'); //移除guest用户对技术资源的不能浏览权限,也就是允许guest对技术区有浏览权限
$acl->removeAllow('user',$resouTech,'edit'); //移除user对技术去的编辑权限,是user对技术区没有编辑权限
if ($acl->isAllowed($roleGuest,$resouRelax,'view'));
{
echo "guest 有娱乐区的浏览权限!";
}
也可以移除控制规则,也就是移除角色对指定资源的允许权限或禁止权限。上边的代码中的:
$acl->removeDeny($roleGuest,$resouTech,'view'); //移除guest用户对技术资源的不能浏览权限,也就是允许guest对技术区有浏览权限
$acl->removeAllow('user',$resouTech,'edit'); //移除user对技术去的编辑权限,是user对技术区没有编辑权限
这两段代码正是此意~!很简单我就不过多解释了~!
相关文章推荐
- ZendFramework学习第三章(核心组件—ACL高级用法之精细访问控制、移除控制规则)
- ZendFramework学习第三章(核心组件—会话处理之Zend_Session高级用法)
- ZendFramework学习第三章(核心组件—会话处理之Zend_Session高级用法)
- ZendFramework学习第三章(核心组件—会话处理之Zend_Session基本用法)
- ZendFramework学习第三章(核心组件—访问控制列表ACL的创建并使用)
- ZendFramework学习第三章(核心组件—会话处理之Zend_Session基本用法)
- ZendFramework学习第三章(核心组件—访问控制列表ACL的创建并使用)
- ZendFramework学习第三章(核心组件—校验器之单个校验器使用)附加北漂乱慨!
- ZendFramework学习第三章(核心组件—使用配置数据之从ini配置文件中读取数据)
- ZendFramework学习第三章(核心组件—校验器之自定义校验器)
- ZendFramework学习第三章(核心组件—使用配置数据之从XML配置文件中读取数据)
- ZendFramework学习第三章(核心组件—校验器之效验链的使用)
- ZendFramework学习第三章(核心组件—使用配置数据之从XML配置文件中读取数据)
- ZendFramework学习第三章(核心组件—使用配置数据之从ini配置文件中读取数据)
- ZendFramework学习第三章(核心组件—过滤器之过滤器的使用方法)
- ZendFramework学习第三章(核心组件—过滤器之 Zend_Filter_Input过滤器)
- ZendFramework学习第三章(核心组件—动态加载文件与类)附加学ZF感慨!
- ZendFramework学习第三章(核心组件—过滤器之系统预定义过滤器)
- ZendFramework学习第三章(核心组件—访问控制列表基本了解)
- ZendFramework学习第三章(核心组件—使用配置数据之从php配置文件中读取数据)