001/* 002 * Copyright 2021 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.plugins.workspaces.tasks; 017 018import java.util.HashMap; 019import java.util.Map; 020 021import org.ametys.core.right.RightManager.RightResult; 022import org.ametys.core.ui.Callable; 023import org.ametys.core.user.UserIdentity; 024import org.ametys.plugins.repository.ModifiableTraversableAmetysObject; 025import org.ametys.plugins.workspaces.AbstractWorkspaceDAO; 026import org.ametys.plugins.workspaces.project.objects.Project; 027 028/** 029 * DAO for interacting with tasks of a project 030 */ 031public abstract class AbstractWorkspaceTaskDAO extends AbstractWorkspaceDAO 032{ 033 /** Rights to handle task */ 034 public static final String RIGHTS_HANDLE_TASK = "Plugin_Workspace_Handle_Task"; 035 036 /** Rights to delete task */ 037 public static final String RIGHTS_DELETE_TASK = "Plugin_Workspace_Delete_Task"; 038 039 /** Rights to comment task */ 040 public static final String RIGHTS_COMMENT_TASK = "Plugin_Workspace_Comment_Task"; 041 042 /** Rights to handle task list */ 043 public static final String RIGHTS_HANDLE_TASK_LIST = "Plugin_Workspace_Handle_Tasks_List"; 044 045 /** Rights to delete task list */ 046 public static final String RIGHTS_DELETE_TASK_LIST = "Plugin_Workspace_Delete_Tasks_List"; 047 048 /** Rights to delete task comment */ 049 public static final String RIGHTS_DELETE_COMMENT_TASK = "Plugin_Workspace_Delete_Comment_Task"; 050 051 /** 052 * Get the tasks lists root 053 * @param project the project 054 * @param createIfNotExist true to create root if not exists 055 * @return the tasks lists root 056 */ 057 protected ModifiableTraversableAmetysObject _getTasksListsRoot(Project project, boolean createIfNotExist) 058 { 059 TasksWorkspaceModule taskModule = _workspaceModuleEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID); 060 return taskModule.getTasksListsRoot(project, createIfNotExist); 061 } 062 063 /** 064 * Get the tasks root 065 * @param project the project name 066 * @param createIfNotExist true to create root if not exists 067 * @return the tasks root 068 */ 069 protected ModifiableTraversableAmetysObject _getTasksRoot(Project project, boolean createIfNotExist) 070 { 071 TasksWorkspaceModule taskModule = _workspaceModuleEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID); 072 return taskModule.getTasksRoot(project, createIfNotExist); 073 } 074 075 /** 076 * Get user rights from project name 077 * @param projectName the project name 078 * @return the user rights 079 */ 080 @Callable (rights = Callable.NO_CHECK_REQUIRED) 081 public Map<String, Object> getUserRights(String projectName) 082 { 083 Map<String, Object> results = new HashMap<>(); 084 085 Project project = _projectManager.getProject(projectName); 086 ModifiableTraversableAmetysObject tasksRoot = _getTasksRoot(project, false); 087 ModifiableTraversableAmetysObject tasksListsRoot = _getTasksListsRoot(project, false); 088 089 UserIdentity user = _currentUserProvider.getUser(); 090 results.put("canWriteTaskList", tasksListsRoot != null && _rightManager.hasRight(user, RIGHTS_HANDLE_TASK_LIST, tasksListsRoot) == RightResult.RIGHT_ALLOW); 091 results.put("canDeleteTaskList", tasksListsRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_TASK_LIST, tasksListsRoot) == RightResult.RIGHT_ALLOW); 092 results.put("canWriteTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_HANDLE_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 093 results.put("canDeleteTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 094 results.put("canCommentTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_COMMENT_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 095 results.put("canDeleteCommentTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_COMMENT_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 096 097 return results; 098 } 099 100}