PHP学习之路(二)——Zend\Permissions 权限管理
2015-05-16 16:05
190 查看
大神指定的第一个任务,自学ZF框架中的Permissions~!
http://zendframework2.sinaapp.com/blog/579
几点细节问题:
1.多继承的时候是从父角色数组的最后一个角色开始继承,这与C++中的继承顺序刚好相反。
EX:
someUser是先继承admin,再继承member,最后继承guest
C++ 中 若 Class someUser: guest, member, admin 则先执行guest的构造函数。
2.模糊条件,既然可以多继承,那么就会产生父角色之间的矛盾的情况。面对这种情况,则按照1.的访问顺序来查询规则。
3.$acl->allow(‘role’,‘resource’,'privilege')
而 $acl->allow('administrator') =>> $acl->allow('administrator',
null,null) ; 代表adminstrator拥有所有权利去访问所有资源。
“ NULL 值来示意应用对所有角色,所有资源,和/或特权 ”
Q:NULL什么时候可以缺省,什么时候不行:
猜想:
4.$acl->removeDeny(‘role’,‘resource’,'privilege');
移除pivilege
5.storing ACL Data for Persistence
用serialize() 来序列号ACL数据,然后存储到任何地方
serialize()用法:http://php.net/manual/zh/function.serialize.php
6.writing conditional acl rulues with assertions
通过 implements
;-------------------------------------------------------------------
断言对象的 assert()
被传给授权查询(例如,isAllowed())适用的 ACL,角色,资源,和特权,以便为断言类提供一个上下文来判断哪里需要它的条件。
不太清楚怎么用assert(),希望有人可以给个实例。是应该new
CleanIPAsserion()后,用CleanIPAssertion->set(v1,v2,v3,v4)??
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://zendframework2.sinaapp.com/blog/579
几点细节问题:
1.多继承的时候是从父角色数组的最后一个角色开始继承,这与C++中的继承顺序刚好相反。
EX:
$parents = array('guest', 'member', 'admin'); $acl->addRole(new Role('someUser'), $parents);
someUser是先继承admin,再继承member,最后继承guest
C++ 中 若 Class someUser: guest, member, admin 则先执行guest的构造函数。
2.模糊条件,既然可以多继承,那么就会产生父角色之间的矛盾的情况。面对这种情况,则按照1.的访问顺序来查询规则。
3.$acl->allow(‘role’,‘resource’,'privilege')
而 $acl->allow('administrator') =>> $acl->allow('administrator',
null,null) ; 代表adminstrator拥有所有权利去访问所有资源。
“ NULL 值来示意应用对所有角色,所有资源,和/或特权 ”
Q:NULL什么时候可以缺省,什么时候不行:
猜想:
4.$acl->removeDeny(‘role’,‘resource’,'privilege');
移除pivilege
5.storing ACL Data for Persistence
用serialize() 来序列号ACL数据,然后存储到任何地方
serialize()用法:http://php.net/manual/zh/function.serialize.php
6.writing conditional acl rulues with assertions
通过 implements
Zend\Permissions\Acl\Assertion\AssertionInterface 构造所需条件的函数,然后加到allow()中达到实现条件性赋值~~
类似大一实训中利用C++ 11特性,传递函数来扩展功能。
用法:
class CleanIPAssertion implements Zend\Permissions\Acl\Assertion\AssertionInterface { public function assert(Zend\Permissions\Acl\Acl $acl, Zend\Permissions\Acl\Role\RoleInterface $role = null, Zend\Permissions\Acl\Resource\ResourceInterface $resource = null, $privilege = null) { return $this->_isCleanIP($_SERVER['REMOTE_ADDR']); } protected function _isCleanIP($ip) { // ...在这里实现逻辑返回bool值,只有为true是,下面的allow才可以生效。
} }
use Zend\Permissions\Acl\Acl; $acl = new Acl(); $acl->allow(null, null, null, new CleanIPAssertion());
;-------------------------------------------------------------------
断言对象的 assert()
被传给授权查询(例如,isAllowed())适用的 ACL,角色,资源,和特权,以便为断言类提供一个上下文来判断哪里需要它的条件。
不太清楚怎么用assert(),希望有人可以给个实例。是应该new
CleanIPAsserion()后,用CleanIPAssertion->set(v1,v2,v3,v4)??
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- PHP学习之路(一)工欲善其事,必先利其器(Zend配置)
- PHP学习之路――工欲善其事,必先利其器(Zend配置)
- 通用权限管理系统多语言开发接口 - java,php 调用接口程序,多业务子系统集成
- 一步步学习SPD2010--附录C--使用SP2010管理任务(5)--配置外部内容类型的权限
- Shiro基础学习(一) 权限管理
- Linux学习笔记——权限管理(1)
- Linux学习之路--日志管理【17】---20180113
- 8-27 linux 学习(权限管理,正则表达式)
- PHP自学之路---雇员管理系统(2)
- 菜鸟的 PHP 学习之路(一):环境搭建与前期准备
- php学习之路之apache的安装
- php管理依赖关系工具composer学习笔记
- linux学习入门13——linux权限机制(linuxcast.net)(用户和组的管理和操作chmod、chown、chgrp)
- php 实现 简单的权限管理
- 【小白笔记】PHP学习之路 (9) --字符串(1)
- Zend & PHP 学习笔记
- ionic学习之Android6.0 运行时权限插件cordova-plugin-android-permissions
- 通用权限管理系统组件 (GPM - General Permissions Manager)
- Linux学习笔记——权限管理(2)
- 通用权限管理系统组件 (GPM - General Permissions Manager) - 错误报告