2 * This document is a part of the source code and related artifacts
3 * for CollectionSpace, an open source collections management system
4 * for museums and related institutions:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright 2009 University of California at Berkeley
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
16 * https://source.collectionspace.org/collection-space/LICENSE.txt
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
24 package org.collectionspace.services.authorization.spring;
26 import java.util.ArrayList;
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.logging.LogFactory;
29 import org.collectionspace.services.authorization.CSpaceAction;
30 import org.collectionspace.services.authorization.CSpaceResource;
31 import org.collectionspace.services.authorization.spi.CSpaceAuthorizationProvider;
32 import org.collectionspace.services.authorization.spi.CSpacePermissionEvaluator;
33 import org.collectionspace.services.authorization.spi.CSpacePermissionManager;
34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
36 import org.springframework.security.access.PermissionEvaluator;
37 import org.springframework.security.acls.domain.BasePermission;
38 import org.springframework.security.acls.domain.GrantedAuthoritySid;
39 import org.springframework.security.acls.domain.ObjectIdentityImpl;
40 import org.springframework.security.acls.model.MutableAclService;
41 import org.springframework.security.acls.model.ObjectIdentity;
42 import org.springframework.security.acls.model.Permission;
43 import org.springframework.security.acls.model.Sid;
44 import org.springframework.transaction.TransactionDefinition;
45 import org.springframework.transaction.TransactionStatus;
46 import org.springframework.transaction.support.DefaultTransactionDefinition;
49 * SpringAuthorizationProvider Spring Security provider
52 public class SpringAuthorizationProvider implements CSpaceAuthorizationProvider {
54 final Log log = LogFactory.getLog(SpringPermissionEvaluator.class);
56 private MutableAclService providerAclService;
58 private PermissionEvaluator providerPermissionEvaluator;
60 private DataSourceTransactionManager txManager;
61 private SpringPermissionEvaluator permissionEvaluator;
62 private SpringPermissionManager permissionManager;
63 private String version = "1.0";
65 public SpringAuthorizationProvider() {
66 permissionManager = new SpringPermissionManager(this);
67 permissionEvaluator = new SpringPermissionEvaluator(this);
70 MutableAclService getProviderAclService() {
71 return providerAclService;
74 public void setProviderAclService(MutableAclService mutableAclService) {
75 this.providerAclService = mutableAclService;
76 if (log.isDebugEnabled()) {
77 log.debug("mutableAclService set");
82 public String getName() {
83 return this.getClass().getSimpleName();
87 public String getVersion() {
91 PermissionEvaluator getProviderPermissionEvaluator() {
92 return providerPermissionEvaluator;
95 public void setProviderPermissionEvaluator(PermissionEvaluator permEval) {
96 this.providerPermissionEvaluator = permEval;
97 if (log.isDebugEnabled()) {
98 log.debug("permission evaluator set");
103 public CSpacePermissionEvaluator getPermissionEvaluator() {
104 return permissionEvaluator;
108 public CSpacePermissionManager getPermissionManager() {
109 return permissionManager;
112 static ObjectIdentity mapResource(CSpaceResource res) {
113 return new ObjectIdentityImpl(res.getType().toString(),
114 Long.valueOf(res.getId().hashCode()));
117 static Sid[] mapPrincipal(String[] principals) {
118 ArrayList<Sid> sids = new ArrayList<Sid>();
119 for (String principal : principals) {
120 sids.add(new GrantedAuthoritySid(principal));
122 return sids.toArray(new Sid[0]);
125 static Permission mapPermssion(CSpaceAction perm) {
128 return BasePermission.ADMINISTRATION;
130 return BasePermission.CREATE;
133 return BasePermission.READ;
135 return BasePermission.WRITE;
137 return BasePermission.DELETE;
143 * @return the txManager
145 DataSourceTransactionManager getTxManager() {
150 * @param txManager the txManager to set
152 public void setTxManager(DataSourceTransactionManager txManager) {
153 this.txManager = txManager;
156 TransactionStatus beginTransaction(String name) {
157 DefaultTransactionDefinition def = new DefaultTransactionDefinition();
158 // explicitly setting the transaction name is something that can only be done programmatically
160 def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
161 return getTxManager().getTransaction(def);
164 void rollbackTransaction(TransactionStatus status) {
165 getTxManager().rollback(status);
168 void commitTransaction(TransactionStatus status) {
169 getTxManager().commit(status);