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

大神指定的第一个任务,自学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)??


;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值