/** * buildParent * * @param AclResource $resource * * @return AclResource * @throws RcmUserException */ public function buildParent(AclResource $resource) { $parentResourceId = $resource->getParentResourceId(); // root parent must be null if ($resource->getResourceId() == $this->rootResource->getResourceId()) { $resource->setParentResourceId(null); return $resource; } if (empty($parentResourceId)) { $resource->setParentResourceId($this->rootResource->getResourceId()); } return $resource; }
/** * getResourceStack * * @param AclResource $resource * @param array $resources * @param int $nestLevel * * @return array * @throws RcmUserException */ public function getResourceStack(AclResource $resource, $resources = [], $nestLevel = 0) { if ($nestLevel > $this->maxResourceNesting) { throw new RcmUserException('Max resource nesting exceeded, max nesting level is ' . $this->maxResourceNesting); } $tempResource = [$resource->getResourceId() => $resource]; $resources = $tempResource + $resources; $parentResourceId = $resource->getParentResourceId(); $hasParent = $parentResourceId !== null; if ($hasParent) { $parentResource = $this->resourceProvider->getResource($parentResourceId); $nestLevel++; return $this->getResourceStack($parentResource, $resources, $nestLevel); } return $resources; }
/** * @deprecated Should only require parentResourceId * setParentResource * * @param AclResource $parentResource parentResource * * @return void */ public function setParentResource(AclResource $parentResource) { $this->setParentResourceId($parentResource->getResourceId()); $this->parentResource = $parentResource; }
/** * set * * @param AclResource $resource * * @return void */ public function set(AclResource $resource) { $resourceId = $resource->getResourceId(); $this->resourceStorage->setItem($resourceId, $resource); }
/** * createNamespaceId * * @param AclResource $aclResource * @param $aclResources * @param null $namespaceSeparator * * @return string */ public function createNamespaceId(AclResource $aclResource, $aclResources, $namespaceSeparator = null) { $parentId = $aclResource->getParentResourceId(); $namespace = $aclResource->getResourceId(); if (!empty($parentId) && isset($aclResources[$parentId])) { $parent = $aclResources[$parentId]; $newNamespace = $this->createNamespaceId($parent, $aclResources, $namespaceSeparator); $namespace = $newNamespace . $this->getNamespaceSeparator($namespaceSeparator) . $namespace; } return $namespace; }