SimpleAcl\Acl::isAllowedReturnResult PHP Метод

isAllowedReturnResult() публичный Метод

Checks is access allowed.
public isAllowedReturnResult ( string | SimpleAcl\Role\RoleAggregateInterface $roleAggregate, string | SimpleAcl\Resource\ResourceAggregateInterface $resourceAggregate, string $ruleName ) : SimpleAcl\RuleResultCollection
$roleAggregate string | SimpleAcl\Role\RoleAggregateInterface
$resourceAggregate string | SimpleAcl\Resource\ResourceAggregateInterface
$ruleName string
Результат SimpleAcl\RuleResultCollection
    public function isAllowedReturnResult($roleAggregate, $resourceAggregate, $ruleName)
    {
        $ruleResultCollection = new RuleResultCollection();
        $roles = $this->getNames($roleAggregate);
        $resources = $this->getNames($resourceAggregate);
        foreach ($roles as $roleName) {
            foreach ($resources as $resourceName) {
                $this->isRuleAllow($roleName, $resourceName, $ruleName, $ruleResultCollection, $roleAggregate, $resourceAggregate);
            }
        }
        return $ruleResultCollection;
    }

Usage Example

Пример #1
0
 public function testChangePriorityViaActionCallable()
 {
     $getResults = function ($resultCollection) {
         $rs = array();
         foreach ($resultCollection as $r) {
             $rs[] = $r;
         }
         return $rs;
     };
     $acl = new Acl();
     $user = new Role('User');
     $resource = new Resource('Resource');
     $acl->addRule($user, $resource, 'View', function (RuleResult $r) {
         $r->setPriority(10);
         return true;
     });
     $acl->addRule($user, $resource, 'View', false);
     $this->assertTrue($acl->isAllowed('User', 'Resource', 'View'));
     $acl = new Acl();
     $p = new Role('P');
     $c1 = new Role('C1');
     $c2 = new Role('C2');
     $c3 = new Role('C3');
     $p->addChild($c1);
     $p->addChild($c2);
     $p->addChild($c3);
     $view = new Rule('View');
     $acl->addRule($p, $resource, $view, function (RuleResult $r) {
         $role = $r->getNeedRoleName();
         if ($role == 'C3' || $role == 'P') {
             return true;
         }
         $r->setPriority(10);
         return $role == 'C1';
     });
     $view1 = new Rule('View');
     $acl->addRule($c1, $resource, $view1, false);
     $view2 = new Rule('View');
     $acl->addRule($c2, $resource, $view2, true);
     $view3 = new Rule('View');
     $acl->addRule($c3, $resource, $view3, false);
     $this->assertTrue($acl->isAllowed('P', 'Resource', 'View'));
     $this->assertTrue($acl->isAllowed('C1', 'Resource', 'View'));
     $this->assertFalse($acl->isAllowed('C2', 'Resource', 'View'));
     $this->assertFalse($acl->isAllowed('C3', 'Resource', 'View'));
     $rs = $getResults($acl->isAllowedReturnResult('P', 'Resource', 'View'));
     $this->assertCount(1, $rs);
     $this->assertEquals(0, $rs[0]->getPriority());
     $this->assertTrue($rs[0]->getAction());
     $this->assertSame($view, $rs[0]->getRule());
     $this->assertSame('P', $rs[0]->getNeedRoleName());
     $this->assertSame('Resource', $rs[0]->getNeedResourceName());
     $rs = $getResults($acl->isAllowedReturnResult('C1', 'Resource', 'View'));
     $this->assertCount(2, $rs);
     $this->assertEquals(10, $rs[0]->getPriority());
     $this->assertSame($view, $rs[0]->getRule());
     $this->assertTrue($rs[0]->getAction());
     $this->assertSame('C1', $rs[0]->getNeedRoleName());
     $this->assertSame('Resource', $rs[0]->getNeedResourceName());
     $this->assertEquals(0, $rs[1]->getPriority());
     $this->assertFalse($rs[1]->getAction());
     $this->assertSame($view1, $rs[1]->getRule());
     $this->assertSame('C1', $rs[1]->getNeedRoleName());
     $this->assertSame('Resource', $rs[1]->getNeedResourceName());
     $rs = $getResults($acl->isAllowedReturnResult('C2', 'Resource', 'View'));
     $this->assertCount(2, $rs);
     $this->assertEquals(10, $rs[0]->getPriority());
     $this->assertSame($view, $rs[0]->getRule());
     $this->assertFalse($rs[0]->getAction());
     $this->assertSame('C2', $rs[0]->getNeedRoleName());
     $this->assertSame('Resource', $rs[0]->getNeedResourceName());
     $this->assertEquals(0, $rs[1]->getPriority());
     $this->assertTrue($rs[1]->getAction());
     $this->assertSame($view2, $rs[1]->getRule());
     $this->assertSame('C2', $rs[1]->getNeedRoleName());
     $this->assertSame('Resource', $rs[1]->getNeedResourceName());
     $rs = $getResults($acl->isAllowedReturnResult('C3', 'Resource', 'View'));
     $this->assertCount(2, $rs);
     $this->assertEquals(-1, $rs[1]->getPriority());
     $this->assertSame($view, $rs[1]->getRule());
     $this->assertTrue($rs[1]->getAction());
     $this->assertSame('C3', $rs[1]->getNeedRoleName());
     $this->assertSame('Resource', $rs[1]->getNeedResourceName());
     $this->assertEquals(0, $rs[0]->getPriority());
     $this->assertFalse($rs[0]->getAction());
     $this->assertSame($view3, $rs[0]->getRule());
     $this->assertSame('C3', $rs[0]->getNeedRoleName());
     $this->assertSame('Resource', $rs[0]->getNeedResourceName());
 }