public function testIsGranted() { $collection = new ResourceCollection(['comments.add', 'comments.edit']); $adminRole = new Rbac\Role('admin', ['list_user', Rbac\Resource::create('delete_user')]); $this->rbac->addRole($adminRole); $adminRole->setResources($collection); $this->assertTrue($adminRole->hasResource('comments.add')); $this->assertTrue($adminRole->hasResource('comments.edit')); $this->assertFalse($adminRole->hasResource('posts.add')); $this->assertFalse($this->rbac->isGranted('admin', 'list_user')); $this->assertFalse($this->rbac->isGranted($adminRole, 'delete_user')); $notExistsRole = new Rbac\Role('notExistsRole'); $this->setExpectedExceptionRegExp('RuntimeException', sprintf('/Role "%s" does not exists./', preg_quote($notExistsRole->getName(), '/'))); $this->assertTrue($this->rbac->isGranted($notExistsRole->getName(), 'delete_user')); }
/** * Add role override if exists * * @param RoleInterface|string $role Role name or object * @param ResourceCollection|array $resources Role resources */ public static function addRole($role, array $resources = []) { if ($role instanceof RoleInterface) { self::$roles[$role->getName()] = $role; } else { $role = new Role($role, $resources); self::$roles[$role->getName()] = $role; } }