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'); }