/** * Returns whether or not a user can perform an action * if a status is given then it will be taken into consideration * @param $actionName * @param null $statusName * @return bool * @throws \Exception */ public function userCanPerformAction($actionName, $statusName = null) { if (!$this->user) { throw new \Exception('No user is defined in this Workflow Manager!'); } if ($this->user->isAdmin()) { return true; } $requiredUserIds = $this->workflow->getValidUsersForAction($actionName, $statusName); if ($requiredUserIds === null) { return true; } foreach ($requiredUserIds as $id) { if (in_array($id, $this->userIds)) { return true; } } return false; }
/** Returns a list of available perspectives for the given user * @param Model\User $user * @return array */ public static function getAvailablePerspectives($user) { $currentConfigName = null; $masterConfig = self::getPerspectivesConfig()->toArray(); if ($user instanceof Model\User) { if ($user->isAdmin()) { $config = self::getPerspectivesConfig()->toArray(); } else { $config = []; $roleIds = $user->getRoles(); $userIds = [$user->getId()]; $userIds = array_merge($userIds, $roleIds); foreach ($userIds as $userId) { if (in_array($userId, $roleIds)) { $userOrRoleToCheck = Model\User\Role::getById($userId); } else { $userOrRoleToCheck = Model\User::getById($userId); } $perspectives = $userOrRoleToCheck->getPerspectives(); if ($perspectives) { foreach ($perspectives as $perspectiveName) { $masterDef = $masterConfig[$perspectiveName]; if ($masterDef) { $config[$perspectiveName] = $masterDef; } } } } if (!$config) { $config = self::getPerspectivesConfig()->toArray(); } } if ($config) { $tmpConfig = []; $validPerspectiveNames = array_keys($config); // sort the stuff foreach ($masterConfig as $masterConfigName => $masterConfiguration) { if (in_array($masterConfigName, $validPerspectiveNames)) { $tmpConfig[$masterConfigName] = $masterConfiguration; } } $config = $tmpConfig; } $currentConfigName = $user->getActivePerspective(); if ($config && !in_array($currentConfigName, array_keys($config))) { $currentConfigName = reset(array_keys($config)); } } else { $config = self::getPerspectivesConfig()->toArray(); } $result = []; foreach ($config as $configName => $configItem) { $item = ["name" => $configName, "icon" => isset($configItem["icon"]) ? $configItem["icon"] : null, "iconCls" => isset($configItem["iconCls"]) ? $configItem["iconCls"] : null]; if ($user) { $item["active"] = $configName == $currentConfigName; } $result[] = $item; } return $result; }