public function currentUserCanManageWorkspace(Workspace $workspace) { if ($workspace->isPersonalWorkspace()) { return false; } if ($workspace->isInternalWorkspace()) { return $this->privilegeManager->isPrivilegeTargetGranted('Neos.Neos:Backend.Module.Management.Workspaces.ManageInternalWorkspaces'); } if ($workspace->isPrivateWorkspace() && $workspace->getOwner() === $this->getCurrentUser()) { return $this->privilegeManager->isPrivilegeTargetGranted('Neos.Neos:Backend.Module.Management.Workspaces.ManageOwnWorkspaces'); } if ($workspace->isPrivateWorkspace() && $workspace->getOwner() !== $this->getCurrentUser()) { return $this->privilegeManager->isPrivilegeTargetGranted('Neos.Neos:Backend.Module.Management.Workspaces.ManageAllPrivateWorkspaces'); } return false; }
/** * Creates an array of workspace names and their respective titles which are possible base workspaces for other * workspaces. * * @param Workspace $excludedWorkspace If set, this workspace will be excluded from the list of returned workspaces * @return array */ protected function prepareBaseWorkspaceOptions(Workspace $excludedWorkspace = null) { $baseWorkspaceOptions = []; foreach ($this->workspaceRepository->findAll() as $workspace) { /** @var Workspace $workspace */ if (!$workspace->isPersonalWorkspace() && $workspace !== $excludedWorkspace && ($workspace->isPublicWorkspace() || $workspace->isInternalWorkspace() || $this->userService->currentUserCanManageWorkspace($workspace))) { $baseWorkspaceOptions[$workspace->getName()] = $workspace->getTitle(); } } return $baseWorkspaceOptions; }