Jarves\Tests\Service\ACL\ObjectTest::testRuleCustom PHP Метод

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

public testRuleCustom ( )
    public function testRuleCustom()
    {
        ItemCategoryQuery::create()->deleteAll();
        ItemQuery::create()->deleteAll();
        TestQuery::create()->deleteAll();
        $this->getACL()->setCaching(true);
        $this->getACL()->removeObjectRules('test/item');
        $user = new User();
        $user->setUsername('testuser');
        $user->save();
        $item1 = new Item();
        $item1->setTitle('Item 1');
        $item1->save();
        $item2 = new Item();
        $item2->setTitle('Item test');
        $item2->save();
        $rule = new Acl();
        $rule->setAccess(true);
        $rule->setObject('test/item');
        $rule->setTargetType(\Jarves\ACL::TARGET_TYPE_USER);
        $rule->setTargetId($user->getId());
        $rule->setMode(\Jarves\ACL::MODE_ALL);
        $rule->setConstraintType(\Jarves\ACL::CONSTRAINT_ALL);
        $rule->setPrio(2);
        $rule->save();
        $rule = new Acl();
        $rule->setAccess(false);
        $rule->setObject('test/item');
        $rule->setTargetType(\Jarves\ACL::TARGET_TYPE_USER);
        $rule->setTargetId($user->getId());
        $rule->setMode(\Jarves\ACL::MODE_ALL);
        $rule->setConstraintType(\Jarves\ACL::CONSTRAINT_CONDITION);
        $rule->setConstraintCode(json_encode([['title', 'LIKE', '%test']]));
        $rule->setPrio(3);
        $rule->save();
        $item1ListingRequest = ACLRequest::create('test/item', $item1->getId())->onlyListingMode()->targetUser($user->getId());
        $item2ListingRequest = ACLRequest::create('test/item', $item2->getId())->onlyListingMode()->targetUser($user->getId());
        $access1 = $this->getACL()->check($item1ListingRequest);
        $access2 = $this->getACL()->check($item2ListingRequest);
        $this->assertTrue($access1, 'item1 has access as the second rule doesnt grab and first rule says all access=true');
        $this->assertFalse($access2, 'no access to item2 as we have defined access=false in second rule.');
        $user->delete();
        $this->getACL()->setCaching(true);
        $this->getACL()->removeObjectRules('test/item');
    }