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.cms.fo.ForceDefaultRepositoryWorkspaceCallableDecorator; 022import org.ametys.core.right.RightManager.RightResult; 023import org.ametys.core.ui.Callable; 024import org.ametys.core.user.UserIdentity; 025import org.ametys.plugins.repository.ModifiableTraversableAmetysObject; 026import org.ametys.plugins.workspaces.AbstractWorkspaceDAO; 027import org.ametys.plugins.workspaces.project.objects.Project; 028 029/** 030 * DAO for interacting with tasks of a project 031 */ 032public abstract class AbstractWorkspaceTaskDAO extends AbstractWorkspaceDAO 033{ 034 /** Rights to handle task */ 035 public static final String RIGHTS_HANDLE_TASK = "Plugin_Workspace_Handle_Task"; 036 037 /** Rights to delete task */ 038 public static final String RIGHTS_DELETE_TASK = "Plugin_Workspace_Delete_Task"; 039 040 /** Rights to comment task */ 041 public static final String RIGHTS_COMMENT_TASK = "Plugin_Workspace_Comment_Task"; 042 043 /** Rights to handle task list */ 044 public static final String RIGHTS_HANDLE_TASK_LIST = "Plugin_Workspace_Handle_Tasks_List"; 045 046 /** Rights to delete task list */ 047 public static final String RIGHTS_DELETE_TASK_LIST = "Plugin_Workspace_Delete_Tasks_List"; 048 049 /** Rights to delete task comment */ 050 public static final String RIGHTS_DELETE_COMMENT_TASK = "Plugin_Workspace_Delete_Comment_Task"; 051 052 /** Right to export ICS link */ 053 public static final String RIGHTS_EXPORT_ICS_LINK = "Plugins_Workspaces_Rights_Export_ICS_Link_Task"; 054 055 /** 056 * Get the tasks lists root 057 * @param project the project 058 * @param createIfNotExist true to create root if not exists 059 * @return the tasks lists root 060 */ 061 protected ModifiableTraversableAmetysObject _getTasksListsRoot(Project project, boolean createIfNotExist) 062 { 063 TasksWorkspaceModule taskModule = _workspaceModuleEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID); 064 return taskModule.getTasksListsRoot(project, createIfNotExist); 065 } 066 067 /** 068 * Get the tasks root 069 * @param project the project name 070 * @param createIfNotExist true to create root if not exists 071 * @return the tasks root 072 */ 073 protected ModifiableTraversableAmetysObject _getTasksRoot(Project project, boolean createIfNotExist) 074 { 075 TasksWorkspaceModule taskModule = _workspaceModuleEP.getModule(TasksWorkspaceModule.TASK_MODULE_ID); 076 return taskModule.getTasksRoot(project, createIfNotExist); 077 } 078 079 /** 080 * Get user rights from project name 081 * @param projectName the project name 082 * @return the user rights 083 */ 084 @Callable (rights = Callable.NO_CHECK_REQUIRED, decorators = ForceDefaultRepositoryWorkspaceCallableDecorator.DECORATOR_ID) 085 public Map<String, Object> getUserRights(String projectName) 086 { 087 Map<String, Object> results = new HashMap<>(); 088 089 Project project = _projectManager.getProject(projectName); 090 ModifiableTraversableAmetysObject tasksRoot = _getTasksRoot(project, false); 091 ModifiableTraversableAmetysObject tasksListsRoot = _getTasksListsRoot(project, false); 092 093 UserIdentity user = _currentUserProvider.getUser(); 094 results.put("canWriteTaskList", tasksListsRoot != null && _rightManager.hasRight(user, RIGHTS_HANDLE_TASK_LIST, tasksListsRoot) == RightResult.RIGHT_ALLOW); 095 results.put("canDeleteTaskList", tasksListsRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_TASK_LIST, tasksListsRoot) == RightResult.RIGHT_ALLOW); 096 results.put("canWriteTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_HANDLE_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 097 results.put("canDeleteTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 098 results.put("canCommentTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_COMMENT_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 099 results.put("canDeleteCommentTask", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_DELETE_COMMENT_TASK, tasksRoot) == RightResult.RIGHT_ALLOW); 100 results.put("canExportICSLink", tasksRoot != null && _rightManager.hasRight(user, RIGHTS_EXPORT_ICS_LINK, tasksRoot) == RightResult.RIGHT_ALLOW); 101 102 return results; 103 } 104 105}