userSession->getUser(); if ($user !== null) { return $this->groupManager->isAdmin($user->getUID()); } return false; } /** * @param string $name * @param resource|string $data Initial payload * * @throws Forbidden * * @return never */ public function createFile($name, $data = null) { throw new Forbidden('Cannot create tags by id'); } /** * @param string $name * * @return never */ public function createDirectory($name) { throw new Forbidden('Permission denied to create collections'); } /** * @param string $name * * @return SystemTagNode */ public function getChild($name) { try { $tag = $this->tagManager->getTagsByIds([$name]); $tag = current($tag); if (!$this->tagManager->canUserSeeTag($tag, $this->userSession->getUser())) { throw new NotFound('Tag with id ' . $name . ' not found'); } return $this->makeNode($tag); } catch (\InvalidArgumentException $e) { throw new BadRequest('Invalid tag id', 0, $e); } catch (TagNotFoundException $e) { throw new NotFound('Tag with id ' . $name . ' not found', 0, $e); } } /** * @return SystemTagNode[] * * @psalm-return array */ public function getChildren() { $visibilityFilter = true; if ($this->isAdmin()) { $visibilityFilter = null; } $tags = $this->tagManager->getAllTags($visibilityFilter); return array_map(function ($tag) { return $this->makeNode($tag); }, $tags); } /** * @param string $name */ public function childExists($name) { try { $tag = $this->tagManager->getTagsByIds([$name]); $tag = current($tag); if (!$this->tagManager->canUserSeeTag($tag, $this->userSession->getUser())) { return false; } return true; } catch (\InvalidArgumentException $e) { throw new BadRequest('Invalid tag id', 0, $e); } catch (TagNotFoundException $e) { return false; } } /** * @return never */ public function delete() { throw new Forbidden('Permission denied to delete this collection'); } /** * @return string * * @psalm-return 'systemtags' */ public function getName() { return 'systemtags'; } /** * @return never */ public function setName($name) { throw new Forbidden('Permission denied to rename this collection'); } /** * Returns the last modification time, as a unix timestamp * * @return null */ public function getLastModified() { return null; } /** * Create a sabre node for the given system tag * * @param ISystemTag $tag * * @return SystemTagNode */ private function makeNode(ISystemTag $tag) { return new SystemTagNode($tag, $this->userSession->getUser(), $this->isAdmin(), $this->tagManager, $this->tagMapper); } }