]> source.dussan.org Git - archiva.git/blob
4f5ed5163ab62d1d4392dc144c848351f7325fac
[archiva.git] /
1 package org.apache.archiva.web.security;
2 /*
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  */
20
21 import org.apache.archiva.admin.model.RepositoryAdminException;
22 import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
23 import org.apache.archiva.redback.rbac.AbstractRBACManager;
24 import org.apache.archiva.redback.rbac.Operation;
25 import org.apache.archiva.redback.rbac.Permission;
26 import org.apache.archiva.redback.rbac.RBACManager;
27 import org.apache.archiva.redback.rbac.RbacManagerException;
28 import org.apache.archiva.redback.rbac.RbacObjectInvalidException;
29 import org.apache.archiva.redback.rbac.RbacObjectNotFoundException;
30 import org.apache.archiva.redback.rbac.Resource;
31 import org.apache.archiva.redback.rbac.Role;
32 import org.apache.archiva.redback.rbac.UserAssignment;
33 import org.apache.archiva.redback.users.UserManager;
34 import org.springframework.context.ApplicationContext;
35 import org.springframework.stereotype.Service;
36
37 import javax.inject.Inject;
38 import java.util.Collection;
39 import java.util.LinkedHashMap;
40 import java.util.List;
41 import java.util.Map;
42
43 /**
44  * @author Olivier Lamy
45  * @since 1.4-M4
46  */
47 @Service("rbacManager#archiva")
48 public class ArchivaRbacManager
49     extends AbstractRBACManager
50     implements RBACManager
51 {
52
53     private Map<String, RBACManager> rbacManagersPerId;
54
55     @Inject
56     private ApplicationContext applicationContext;
57
58     @Inject
59     private RedbackRuntimeConfigurationAdmin redbackRuntimeConfigurationAdmin;
60
61     @Override
62     public void initialize()
63     {
64         try
65         {
66             List<String> rbacManagerIds =
67                 redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration().getRbacManagerImpls();
68
69             log.info( "use rbacManagerIds: '{}'", rbacManagerIds );
70
71             this.rbacManagersPerId = new LinkedHashMap<String, RBACManager>( rbacManagerIds.size() );
72
73             for ( String id : rbacManagerIds )
74             {
75                 RBACManager rbacManager = applicationContext.getBean( "rbacManager#" + id, RBACManager.class );
76
77                 rbacManagersPerId.put( id, rbacManager );
78             }
79         }
80         catch ( RepositoryAdminException e )
81         {
82             // revert to a default one ?
83             log.error( e.getMessage(), e );
84             throw new RuntimeException( e.getMessage(), e );
85         }
86     }
87
88     protected RBACManager getRbacManagerForCommon()
89     {
90         return this.rbacManagersPerId.values().iterator().next();
91     }
92
93     public Role createRole( String name )
94     {
95         return getRbacManagerForCommon().createRole( name );
96     }
97
98     public Role saveRole( Role role )
99         throws RbacObjectInvalidException, RbacManagerException
100     {
101         return getRbacManagerForCommon().saveRole( role );
102     }
103
104     public void saveRoles( Collection<Role> roles )
105         throws RbacObjectInvalidException, RbacManagerException
106     {
107         getRbacManagerForCommon().saveRoles( roles );
108     }
109
110     public Role getRole( String roleName )
111         throws RbacObjectNotFoundException, RbacManagerException
112     {
113         for ( RBACManager rbacManager : rbacManagersPerId.values() )
114         {
115             Role role = rbacManager.getRole( roleName );
116             if ( role != null )
117             {
118                 return role;
119             }
120         }
121         log.debug( "cannot find role for name: ‘{}", roleName );
122         return null;
123     }
124
125     public List<Role> getAllRoles()
126         throws RbacManagerException
127     {
128         // iterate and aggregate results ?
129         return getRbacManagerForCommon().getAllRoles();
130     }
131
132     public void removeRole( Role role )
133         throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
134     {
135         // iterate remove ?
136         getRbacManagerForCommon().removeRole( role );
137     }
138
139     public Permission createPermission( String name )
140         throws RbacManagerException
141     {
142         // iterate ?
143         return getRbacManagerForCommon().createPermission( name );
144     }
145
146     public Permission createPermission( String name, String operationName, String resourceIdentifier )
147         throws RbacManagerException
148     {
149         // iterate ?
150         return getRbacManagerForCommon().createPermission( name, operationName, resourceIdentifier );
151     }
152
153     public Permission savePermission( Permission permission )
154         throws RbacObjectInvalidException, RbacManagerException
155     {
156         // iterate ?
157         return getRbacManagerForCommon().savePermission( permission );
158     }
159
160     public Permission getPermission( String permissionName )
161         throws RbacObjectNotFoundException, RbacManagerException
162     {
163         // iterate ?
164         return getRbacManagerForCommon().getPermission( permissionName );
165     }
166
167     public List<Permission> getAllPermissions()
168         throws RbacManagerException
169     {
170         // iterate and aggregate ?
171         return getRbacManagerForCommon().getAllPermissions();
172     }
173
174     public void removePermission( Permission permission )
175         throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
176     {
177         // iterate remove ?
178         getRbacManagerForCommon().removePermission( permission );
179     }
180
181     public Operation createOperation( String name )
182         throws RbacManagerException
183     {
184         // iterate ?
185         return getRbacManagerForCommon().createOperation( name );
186     }
187
188     public Operation saveOperation( Operation operation )
189         throws RbacObjectInvalidException, RbacManagerException
190     {
191         // iterate ?
192         return getRbacManagerForCommon().saveOperation( operation );
193     }
194
195     public Operation getOperation( String operationName )
196         throws RbacObjectNotFoundException, RbacManagerException
197     {
198         // iterate ?
199         return getRbacManagerForCommon().getOperation( operationName );
200     }
201
202     public List<Operation> getAllOperations()
203         throws RbacManagerException
204     {
205         // iterate and aggregate ?
206         return getRbacManagerForCommon().getAllOperations();
207     }
208
209     public void removeOperation( Operation operation )
210         throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
211     {
212         // iterate ?
213         getRbacManagerForCommon().removeOperation( operation );
214     }
215
216     public Resource createResource( String identifier )
217         throws RbacManagerException
218     {
219         // iterate ?
220         return getRbacManagerForCommon().createResource( identifier );
221     }
222
223     public Resource saveResource( Resource resource )
224         throws RbacObjectInvalidException, RbacManagerException
225     {
226         // iterate ?
227         return getRbacManagerForCommon().saveResource( resource );
228     }
229
230     public Resource getResource( String resourceIdentifier )
231         throws RbacObjectNotFoundException, RbacManagerException
232     {
233         // iterate ?
234         return getRbacManagerForCommon().getResource( resourceIdentifier );
235     }
236
237     public List<Resource> getAllResources()
238         throws RbacManagerException
239     {
240         // iterate and aggregate ?
241         return getRbacManagerForCommon().getAllResources();
242     }
243
244     public void removeResource( Resource resource )
245         throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
246     {
247         // iterate
248         getRbacManagerForCommon().removeResource( resource );
249     }
250
251     public UserAssignment createUserAssignment( String principal )
252         throws RbacManagerException
253     {
254         // iterate ?
255         return getRbacManagerForCommon().createUserAssignment( principal );
256     }
257
258     public UserAssignment saveUserAssignment( UserAssignment userAssignment )
259         throws RbacObjectInvalidException, RbacManagerException
260     {
261         // iterate ?
262         return getRbacManagerForCommon().saveUserAssignment( userAssignment );
263     }
264
265     public UserAssignment getUserAssignment( String principal )
266         throws RbacObjectNotFoundException, RbacManagerException
267     {
268         // iterate ?
269         return getRbacManagerForCommon().getUserAssignment( principal );
270     }
271
272     @Override
273     public boolean userAssignmentExists( String principal )
274     {
275         return getRbacManagerForCommon().userAssignmentExists( principal );
276     }
277
278     @Override
279     public boolean userAssignmentExists( UserAssignment assignment )
280     {
281         return getRbacManagerForCommon().userAssignmentExists( assignment );
282     }
283
284     public List<UserAssignment> getAllUserAssignments()
285         throws RbacManagerException
286     {
287         // iterate
288         return getRbacManagerForCommon().getAllUserAssignments();
289     }
290
291     public List<UserAssignment> getUserAssignmentsForRoles( Collection<String> roleNames )
292         throws RbacManagerException
293     {
294         // iterate ?
295         return getRbacManagerForCommon().getUserAssignmentsForRoles( roleNames );
296     }
297
298     public void removeUserAssignment( UserAssignment userAssignment )
299         throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
300     {
301         // iterate ?
302         getRbacManagerForCommon().removeUserAssignment( userAssignment );
303     }
304
305     @Override
306     public boolean roleExists( String name )
307         throws RbacManagerException
308     {
309         boolean exists = false;
310         for ( RBACManager manager : rbacManagersPerId.values() )
311         {
312             exists = manager.roleExists( name );
313             if ( exists )
314             {
315                 return true;
316             }
317         }
318         return exists;
319     }
320
321     @Override
322     public boolean roleExists( Role role )
323         throws RbacManagerException
324     {
325         return roleExists( role.getName() );
326     }
327
328     public void eraseDatabase()
329     {
330         log.warn( "eraseDatabase not implemented" );
331     }
332
333     @Override
334     public boolean isFinalImplementation()
335     {
336         return false;
337     }
338
339     public String getDescriptionKey()
340     {
341         return "archiva.redback.rbacmanager.archiva";
342     }
343 }