您的位置:首页 > 编程语言 > PHP开发

PHP学习之路(二)——Zend\Permissions 权限管理

2015-05-16 16:05 190 查看
大神指定的第一个任务,自学ZF框架中的Permissions~!
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)??

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: