///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.user; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.collections.list.UnmodifiableList; import org.projectforge.access.AccessChecker; import org.projectforge.fibu.AuftragRight; import org.projectforge.fibu.ProjektRight; import org.projectforge.gantt.GanttChartRight; import org.projectforge.humanresources.HRPlanningRight; import org.projectforge.meb.MebRight; public class UserRights { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(UserRights.class); /** * FALSE, TRUE; */ public static final UserRightValue[] FALSE_TRUE = new UserRightValue[] { UserRightValue.FALSE, UserRightValue.TRUE}; /** * FALSE, READONLY, READWRITE; */ public static final UserRightValue[] FALSE_READONLY_READWRITE = new UserRightValue[] { UserRightValue.FALSE, UserRightValue.READONLY, UserRightValue.READWRITE}; /** * FALSE, READONLY, PARTLY_READWRITE, READWRITE; */ public static final UserRightValue[] FALSE_READONLY_PARTLYREADWRITE_READWRITE = new UserRightValue[] { UserRightValue.FALSE, UserRightValue.READONLY, UserRightValue.PARTLYREADWRITE, UserRightValue.READWRITE}; /** * READONLY, READWRITE; */ public static final UserRightValue[] READONLY_READWRITE = new UserRightValue[] { UserRightValue.READONLY, UserRightValue.READWRITE}; /** * READONLY, PARTY_READWRITE, READWRITE; */ public static final UserRightValue[] READONLY_PARTLYREADWRITE_READWRITE = new UserRightValue[] { UserRightValue.READONLY, UserRightValue.PARTLYREADWRITE, UserRightValue.READWRITE}; public static final ProjectForgeGroup[] FIBU_GROUPS = { ProjectForgeGroup.FINANCE_GROUP, ProjectForgeGroup.CONTROLLING_GROUP}; public static final ProjectForgeGroup[] FIBU_ORGA_GROUPS = { ProjectForgeGroup.FINANCE_GROUP, ProjectForgeGroup.ORGA_TEAM, ProjectForgeGroup.CONTROLLING_GROUP}; public static final ProjectForgeGroup[] FIBU_ORGA_PM_GROUPS = { ProjectForgeGroup.FINANCE_GROUP, ProjectForgeGroup.ORGA_TEAM, ProjectForgeGroup.CONTROLLING_GROUP, ProjectForgeGroup.PROJECT_MANAGER, ProjectForgeGroup.PROJECT_ASSISTANT}; private static UserRights instance; private final Map<UserRightId, UserRight> rights = new HashMap<UserRightId, UserRight>(); private final Map<String, UserRightId> rightIds = new HashMap<String, UserRightId>(); private final List<UserRight> orderedRights = new ArrayList<UserRight>(); private final AccessChecker accessChecker; public static UserRights instance() { return instance; } public static AccessChecker getAccessChecker() { if (instance == null) { throw new IllegalStateException("UserRights not yet initalized, so AccessChecker is not yet available."); } return instance.accessChecker; } public static UserGroupCache getUserGroupCache() { return getAccessChecker().getUserGroupCache(); } public static UserRights initialize(final AccessChecker accessChecker) { if (instance != null) { // log.warn("UserRights already initialized. Method initialized was called twice!"); return instance; } instance = new UserRights(accessChecker); return instance; } public UserRight getRight(final UserRightId id) { return rights.get(id); } public UserRightId getRightId(final String userRightId) { final UserRightId rightId = rightIds.get(userRightId); if (rightId == null) { log.warn("UserRightId with id '" + userRightId + "' not found (may-be not yet initialized)."); } return rightId; } @SuppressWarnings("unchecked") public List<UserRight> getOrderedRights() { return UnmodifiableList.decorate(orderedRights); } private UserRights(final AccessChecker accessChecker) { this.accessChecker = accessChecker; addRight(UserRightCategory.FIBU, UserRightId.FIBU_EMPLOYEE, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS).setReadOnlyForControlling(); addRight(UserRightCategory.FIBU, UserRightId.FIBU_EMPLOYEE_SALARY, FALSE_READONLY_READWRITE, FIBU_GROUPS).setAvailableGroupRightValues( ProjectForgeGroup.CONTROLLING_GROUP, UserRightValue.FALSE, UserRightValue.READONLY); addRight(UserRightCategory.FIBU, UserRightId.FIBU_AUSGANGSRECHNUNGEN, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS) .setReadOnlyForControlling(); addRight(UserRightCategory.FIBU, UserRightId.FIBU_EINGANGSRECHNUNGEN, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS) .setReadOnlyForControlling(); addRight(UserRightCategory.FIBU, UserRightId.FIBU_DATEV_IMPORT, FALSE_TRUE, FIBU_GROUPS); addRight(UserRightCategory.FIBU, UserRightId.FIBU_COST_UNIT, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS).setReadOnlyForControlling(); addRight(UserRightCategory.FIBU, UserRightId.FIBU_ACCOUNTS, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS).setReadOnlyForControlling(); addRight(UserRightCategory.ORGA, UserRightId.ORGA_CONTRACTS, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS).setReadOnlyForControlling(); addRight(UserRightCategory.ORGA, UserRightId.ORGA_INCOMING_MAIL, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS) .setReadOnlyForControlling(); addRight(UserRightCategory.ORGA, UserRightId.ORGA_OUTGOING_MAIL, FALSE_READONLY_READWRITE, FIBU_ORGA_GROUPS) .setReadOnlyForControlling(); addRight(new ProjektRight()); addRight(new AuftragRight()); addRight(new MebRight()); addRight(new GanttChartRight()); addRight(new HRPlanningRight()); } public UserGroupsRight addRight(final UserRightCategory category, final UserRightId id, final UserRightValue[] rightValues, final ProjectForgeGroup... fibuGroups) { final UserGroupsRight right = new UserGroupsRight(id, category, rightValues, fibuGroups); addRight(right); return right; } public void addRight(final UserRight right) { final UserRightId userRightId = right.getId(); rights.put(right.getId(), right); rightIds.put(userRightId.getId(), userRightId); orderedRights.add(right); } }