// Copyright 2004-2014 Jim Voris // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package com.qumasoft.server; import com.qumasoft.qvcslib.RoleType; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; /** * Role privileges store. * @author Jim Voris */ public class RolePrivilegesStore implements java.io.Serializable { private static final long serialVersionUID = -4735485968226473670L; // Create our logger object private static final Logger LOGGER = Logger.getLogger("com.qumasoft.server"); /** * This root map contains the users who are 'super' users */ private final Map<String, Map<String, Boolean>> privilegesMap = Collections.synchronizedMap(new TreeMap<String, Map<String, Boolean>>()); /** * This map holds the RoleType objects that we know about. We populate it in a lazy way. */ private transient Map<String, RoleType> roleTypeMap; /** * Creates a new instance of RolePrivilegesStore. */ public RolePrivilegesStore() { } /** * Create the default privileges. */ synchronized void createDefaultPrivileges() { // Create the READER privileges createReaderPrivileges(); // Create the WRITER privileges createWriterPrivileges(); // Create the PROJECT_ADMIN privileges createProjectAdminPrivileges(); // Create the CEMETERY_ADMIN privileges createCemeteryAdminPrivileges(); // Create the ADMIN privileges createAdminPrivileges(); // Create the DEVELOPER privileges createDeveloperPrivileges(); } private void createReaderPrivileges() { Map<String, Boolean> readerPrivileges = new TreeMap<>(); readerPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.TRUE); readerPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.TRUE); readerPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.FALSE); readerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.FALSE); privilegesMap.put(RoleManagerInterface.READER, readerPrivileges); } private void createWriterPrivileges() { Map<String, Boolean> writerPrivileges = new TreeMap<>(); writerPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.TRUE); writerPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.FALSE); writerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.FALSE); privilegesMap.put(RoleManagerInterface.WRITER, writerPrivileges); } private void createProjectAdminPrivileges() { Map<String, Boolean> projectAdminPrivileges = new TreeMap<>(); projectAdminPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.FALSE); projectAdminPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.TRUE); projectAdminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.TRUE); privilegesMap.put(RoleManagerInterface.PROJECT_ADMIN, projectAdminPrivileges); } private void createCemeteryAdminPrivileges() { Map<String, Boolean> cemeteryAdminPrivileges = new TreeMap<>(); cemeteryAdminPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.TRUE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.FALSE); cemeteryAdminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.FALSE); privilegesMap.put(RoleManagerInterface.CEMETERY_ADMIN, cemeteryAdminPrivileges); } void createAdminPrivileges() { Map<String, Boolean> adminPrivileges = new TreeMap<>(); adminPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.FALSE); adminPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.FALSE); privilegesMap.put(RoleManagerInterface.ADMIN, adminPrivileges); } private void createDeveloperPrivileges() { Map<String, Boolean> developerPrivileges = new TreeMap<>(); developerPrivileges.put(RolePrivilegesManager.GET.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.GET_DIRECTORY.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SHOW_CEMETERY.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.SHOW_BRANCH_ARCHIVES_DIRECTORY.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.CHECK_OUT.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.CHECK_IN.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.LOCK.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.UNLOCK.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.BREAK_LOCK.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.LABEL.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.LABEL_DIRECTORY.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.LABEL_AT_CHECKIN.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.REMOVE_LABEL_DIRECTORY.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.RENAME_FILE.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.MOVE_FILE.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SET_OBSOLETE.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SET_ATTRIBUTES.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SET_COMMENT_PREFIX.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SET_MODULE_DESCRIPTION.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.SET_REVISION_DESCRIPTION.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.CREATE_ARCHIVE.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.ADD_DIRECTORY.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.DELETE_DIRECTORY.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.MERGE_FROM_PARENT.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.PROMOTE_TO_PARENT.getAction(), Boolean.TRUE); developerPrivileges.put(RolePrivilegesManager.ADD_USER_ROLE.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.REMOVE_USER_ROLE.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.ASSIGN_USER_ROLES.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.LIST_PROJECT_USERS.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.LIST_USER_ROLES.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_PROJECT.getAction(), Boolean.FALSE); developerPrivileges.put(RolePrivilegesManager.SERVER_MAINTAIN_VIEW.getAction(), Boolean.FALSE); privilegesMap.put(RoleManagerInterface.DEVELOPER, developerPrivileges); } synchronized boolean isRolePrivileged(final String roleName, final String actionName) { boolean returnValue = false; Map localPrivilegesMap = privilegesMap.get(roleName); if (localPrivilegesMap != null) { Boolean flag = (Boolean) localPrivilegesMap.get(actionName); if (flag != null) { returnValue = flag.booleanValue(); } } return returnValue; } synchronized String[] getAvailableRoles() { String[] availableRoles = new String[privilegesMap.keySet().size() - 1]; Iterator<String> it = privilegesMap.keySet().iterator(); int i = 0; while (it.hasNext()) { String role = it.next(); if (0 != role.compareTo(RoleManagerInterface.ADMIN)) { availableRoles[i++] = role; } } return availableRoles; } synchronized RoleType getRoleType(final String roleType) { RoleType returnedRoleType = null; if (privilegesMap.containsKey(roleType)) { if (roleTypeMap == null) { roleTypeMap = Collections.synchronizedMap(new TreeMap<String, RoleType>()); } if (roleTypeMap.containsKey(roleType)) { returnedRoleType = roleTypeMap.get(roleType); } else { // We need to make a new RoleType object and put it in the map. RoleType newRoleType = new RoleType(roleType); roleTypeMap.put(roleType, newRoleType); returnedRoleType = newRoleType; } } return returnedRoleType; } synchronized String[] getRolePrivilegesList() { Map<String, Boolean> privileges = privilegesMap.get(RoleManagerInterface.ADMIN); String[] privilegesList = new String[privileges.size()]; Iterator<String> privilegesIterator = privileges.keySet().iterator(); int index = 0; while (privilegesIterator.hasNext()) { privilegesList[index++] = privilegesIterator.next(); } return privilegesList; } synchronized Boolean[] getRolePrivilegesFlags(final String role) { Map<String, Boolean> allPrivileges = privilegesMap.get(RoleManagerInterface.ADMIN); Map<String, Boolean> rolePrivileges = privilegesMap.get(role); Boolean[] privilegesFlagList = new Boolean[allPrivileges.size()]; Iterator<String> privilegesIterator = allPrivileges.keySet().iterator(); int index = 0; while (privilegesIterator.hasNext()) { Boolean flag = rolePrivileges.get(privilegesIterator.next()); if (flag != null) { privilegesFlagList[index++] = flag; } else { privilegesFlagList[index++] = Boolean.FALSE; } } return privilegesFlagList; } synchronized void updatePrivileges(final String role, final String[] privileges, final Boolean[] privilegesFlags) { // Only update non-ADMIN roles. if (0 != role.compareTo(RoleManagerInterface.ADMIN)) { if (privilegesMap.containsKey(role)) { // Delete the existing role privilegesMap.remove(role); } int size = privilegesFlags.length; Map<String, Boolean> rolePrivileges = new TreeMap<>(); for (int i = 0; i < size; i++) { rolePrivileges.put(privileges[i], privilegesFlags[i]); } privilegesMap.put(role, rolePrivileges); } } synchronized void deleteRole(final String role) { // Only delete non-ADMIN roles. if (0 != role.compareTo(RoleManagerInterface.ADMIN)) { if (privilegesMap.containsKey(role)) { // Delete the role privilegesMap.remove(role); } } } synchronized void dumpMaps() { LOGGER.log(Level.INFO, "RolePrivilegesStore.dumpMaps()"); Iterator<String> keyIterator = privilegesMap.keySet().iterator(); while (keyIterator.hasNext()) { String key = keyIterator.next(); LOGGER.log(Level.INFO, "Role:" + key); Map<String, Boolean> privileges = privilegesMap.get(key); Iterator<Map.Entry<String, Boolean>> privilegesIterator = privileges.entrySet().iterator(); while (privilegesIterator.hasNext()) { Map.Entry<String, Boolean> entry = privilegesIterator.next(); String action = entry.getKey(); Boolean flag = entry.getValue(); LOGGER.log(Level.INFO, "\t" + action + ": " + flag.toString()); } } } }