/* * Copyright (C) 2010 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.spi.model; import org.xcmis.spi.CmisRuntimeException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * Mapping of actions that can be performed to required permissions. Mapping * table contains key-permissions pairs. Because several allowable actions may * require permissions on more than one object – for example, moving a document * from one folder to another may require permissions on the document and each * of the folders – the mapping table is defined in terms of permission "keys", * where each key combines the name of the allowable action as the object for * which the principal needs the required permission. For example – the * "canMoveObject.Source" key indicates the permissions that the principal must * have on the "source folder" to move an object from that folder into another * folder. Permissions represented as set of one or more permissions that the * principal must have to be allowed to perform action. * * @author <a href="mailto:andrey00x@gmail.com">Andrey Parfonov</a> * @version $Id: $ */ public final class PermissionMapping { public static final String CAN_GET_DESCENDENTS_FOLDER = "canGetDescendents.Folder"; public static final String CAN_GET_FOLDER_TREE_FOLDER = "canGetFolderTree.Folder"; public static final String CAN_GET_CHILDREN_FOLDER = "canGetChildren.Folder"; public static final String CAN_GET_OBJECT_PARENTS_OBJECT = "canGetObjectParents.Object"; public static final String CAN_GET_FOLDER_PARENT_FOLDER = "canGetFolderParent.Folder"; public static final String CAN_CREATE_DOCUMENT_FOLDER = "canCreateDocument.Folder"; public static final String CAN_CREATE_FOLDER_FOLDER = "canCreateFolder.Folder"; public static final String CAN_CREATE_RELATIONSHIP_SOURCE = "canCreateRelationship.Source"; public static final String CAN_CREATE_RELATIONSHIP_TARGET = "canCreateRelationship.Target"; public static final String CAN_GET_PROPERTIES_OBJECT = "canGetProperties.Object"; public static final String CAN_GET_CONTENT_STREAM_OBJECT = "canGetContentStream.Object"; public static final String CAN_UPDATE_PROPERTIES_OBJECT = "canUpdateProperties.Object"; public static final String CAN_MOVE_OBJECT_OBJECT = "canMoveObject.Object"; public static final String CAN_MOVE_OBJECT_TARGET = "canMoveObject.Target"; public static final String CAN_MOVE_OBJECT_SOURCE = "canMoveObject.Source"; public static final String CAN_DELETE_OBJECT = "canDelete.Object"; public static final String CAN_DELETE_FOLDER = "canDelete.Folder"; public static final String CAN_DELETE_TREE_FOLDER = "canDeleteTree.Folder"; public static final String CAN_SET_CONTENT_DOCUMENT = "canSetContentStream.Document"; public static final String CAN_DELETE_CONTENT_DOCUMENT = "canDeleteContentStream.Document"; public static final String CAN_GET_RENDITIONS_OBJECT = "canRenditions.Object"; public static final String CAN_ADD_TO_FOLDER_OBJECT = "canAddToFolder.Object"; public static final String CAN_ADD_TO_FOLDER_FOLDER = "canAddToFolder.Folder"; public static final String CAN_REMOVE_OBJECT_FROM_FOLDER_OBJECT = "canRemoveObjectFromFolder.Object"; public static final String CAN_REMOVE_OBJECT_FROM_FOLDER_FOLDER = "canRemoveObjectFromFolder.Folder"; public static final String CAN_CHECKOUT_DOCUMENT = "canCheckout.Document"; public static final String CAN_CANCEL_CHECKOUT_DOCUMENT = "canCancelCheckout.Document"; public static final String CAN_CHECKIN_DOCUMENT = "canCheckin.Document"; public static final String CAN_GET_ALL_VERSIONS_DOCUMENT = "canGetAllVersions.Document"; public static final String CAN_GET_OBJECT_RELATIONSHIPS_OBJECT = "canGetObjectRelationships.Object"; public static final String CAN_ADD_POLICY_OBJECT = "canAddPolicy.Object"; public static final String CAN_ADD_POLICY_POLICY = "canAddPolicy.Policy"; public static final String CAN_REMOVE_POLICY_OBJECT = "canRemovePolicy.Object"; public static final String CAN_REMOVE_POLICY_POLICY = "canRemovePolicy.Policy"; public static final String CAN_GET_APPLIED_POLICIES_OBJECT = "canGetAppliedPolicies.Object"; public static final String CAN_GET_ACL_OBJECT = "canGetACL.Object"; public static final String CAN_APPLY_ACL_OBJECT = "canApplyACL.Object"; public static final Collection<String> DEFAULT_KEYS = Collections.unmodifiableCollection(Arrays.asList(CAN_GET_DESCENDENTS_FOLDER, CAN_GET_FOLDER_TREE_FOLDER, CAN_GET_CHILDREN_FOLDER, CAN_GET_OBJECT_PARENTS_OBJECT, CAN_GET_FOLDER_PARENT_FOLDER, CAN_CREATE_DOCUMENT_FOLDER, CAN_CREATE_FOLDER_FOLDER, CAN_CREATE_RELATIONSHIP_SOURCE, CAN_CREATE_RELATIONSHIP_TARGET, CAN_GET_PROPERTIES_OBJECT, CAN_GET_CONTENT_STREAM_OBJECT, CAN_UPDATE_PROPERTIES_OBJECT, CAN_MOVE_OBJECT_OBJECT, CAN_MOVE_OBJECT_TARGET, CAN_MOVE_OBJECT_SOURCE, CAN_DELETE_OBJECT, CAN_DELETE_FOLDER, CAN_DELETE_TREE_FOLDER, CAN_SET_CONTENT_DOCUMENT, CAN_DELETE_CONTENT_DOCUMENT, CAN_GET_RENDITIONS_OBJECT, CAN_ADD_TO_FOLDER_OBJECT, CAN_ADD_TO_FOLDER_FOLDER, CAN_REMOVE_OBJECT_FROM_FOLDER_OBJECT, CAN_REMOVE_OBJECT_FROM_FOLDER_FOLDER, CAN_CHECKOUT_DOCUMENT, CAN_CANCEL_CHECKOUT_DOCUMENT, CAN_CHECKIN_DOCUMENT, CAN_GET_ALL_VERSIONS_DOCUMENT, CAN_GET_OBJECT_RELATIONSHIPS_OBJECT, CAN_ADD_POLICY_OBJECT, CAN_ADD_POLICY_POLICY, CAN_REMOVE_POLICY_OBJECT, CAN_REMOVE_POLICY_POLICY, CAN_GET_APPLIED_POLICIES_OBJECT, CAN_GET_ACL_OBJECT, CAN_APPLY_ACL_OBJECT)); private final Map<String, Collection<String>> all = new HashMap<String, Collection<String>>(); public PermissionMapping(Map<String, Collection<String>> map) { if (map == null) { throw new CmisRuntimeException("Pemission mapping may not be null."); } all.putAll(map); } public PermissionMapping() { } /** * @param key permission key * @param permissions set of permission needed */ public void put(String key, Collection<String> permissions) { all.put(key, permissions); } /** * @param key permission key * @return set of permission needed to perform action */ public Collection<String> getPermissions(String key) { Collection<String> permissions = all.get(key); if (permissions != null) { return Collections.unmodifiableCollection(permissions); } return null; } public Map<String, Collection<String>> getAll() { return Collections.unmodifiableMap(all); } }