]> source.dussan.org Git - archiva.git/blob
8f5d0d156a6fe6f7f3ca1c90dfb7966fa134a628
[archiva.git] /
1 package org.apache.archiva.redback.struts2.action.admin;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.redback.rbac.Operation;
23 import org.apache.archiva.redback.rbac.Permission;
24 import org.apache.archiva.redback.rbac.RBACManager;
25 import org.apache.archiva.redback.rbac.Resource;
26 import org.apache.archiva.redback.rbac.RbacManagerException;
27 import org.apache.archiva.redback.struts2.action.RedbackActionSupport;
28 import org.codehaus.plexus.util.StringUtils;
29 import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
30 import org.apache.archiva.redback.integration.interceptor.SecureActionException;
31 import org.apache.archiva.redback.integration.role.RoleConstants;
32 import org.apache.archiva.redback.integration.util.PermissionSorter;
33 import org.springframework.context.annotation.Scope;
34 import org.springframework.stereotype.Controller;
35
36 import javax.inject.Inject;
37 import javax.inject.Named;
38 import java.util.Arrays;
39 import java.util.Collections;
40 import java.util.List;
41
42 /**
43  * PermissionsAction
44  *
45  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
46  *
47  */
48 @Controller( "redback-permissions" )
49 @Scope( "prototype" )
50 public class PermissionsAction
51     extends RedbackActionSupport
52 {
53     private static final String LIST = "list";
54
55     // ------------------------------------------------------------------
56     // Plexus Component Requirements
57     // ------------------------------------------------------------------
58
59     /**
60      *  role-hint="cached"
61      */
62     @Inject
63     @Named( value = "rBACManager#cached" )
64     private RBACManager manager;
65
66     // ------------------------------------------------------------------
67     // Action Parameters
68     // ------------------------------------------------------------------
69
70     private String name;
71
72     private String description;
73
74     private String operationName;
75
76     private String operationDescription;
77
78     private String resourceIdentifier;
79
80     private List<Permission> allPermissions;
81
82     // ------------------------------------------------------------------
83     // Action Entry Points - (aka Names)
84     // ------------------------------------------------------------------
85
86     public String list()
87     {
88         try
89         {
90             allPermissions = manager.getAllPermissions();
91
92             if ( allPermissions == null )
93             {
94                 allPermissions = Collections.emptyList();
95             }
96
97             Collections.sort( allPermissions, new PermissionSorter() );
98         }
99         catch ( RbacManagerException e )
100         {
101             addActionError( getText( "cannot.list.all.permissions", Arrays.asList( (Object) e.getMessage() ) ) );
102             log.error( "System error:", e );
103             allPermissions = Collections.emptyList();
104         }
105
106         return LIST;
107     }
108
109     public String input()
110     {
111         if ( name == null )
112         {
113             addActionError( getText( "cannot.edit.null.permission" ) );
114             return ERROR;
115         }
116
117         if ( StringUtils.isEmpty( name ) )
118         {
119             addActionError( getText( "cannot.edit.empty.permission" ) );
120             return ERROR;
121         }
122
123         if ( !manager.permissionExists( name ) )
124         {
125             // Means that the permission name doesn't exist.
126             // We should exit early and not attempt to look up the permission information.
127             return LIST;
128         }
129
130         try
131         {
132             Permission permission = manager.getPermission( name );
133             if ( permission == null )
134             {
135                 addActionError( getText( "cannot.operate.null.permission" ) );
136                 return ERROR;
137             }
138
139             description = permission.getDescription();
140             Operation operation = permission.getOperation();
141             if ( operation != null )
142             {
143                 operationName = operation.getName();
144                 operationDescription = operation.getDescription();
145             }
146
147             Resource resource = permission.getResource();
148             if ( resource != null )
149             {
150                 resourceIdentifier = resource.getIdentifier();
151             }
152         }
153         catch ( RbacManagerException e )
154         {
155             addActionError( getText( "cannot.get.permission", Arrays.asList( (Object) name, e.getMessage() ) ) );
156             return ERROR;
157         }
158
159         return LIST;
160     }
161
162     public String submit()
163     {
164         if ( name == null )
165         {
166             addActionError( getText( "cannot.edit.null.permission" ) );
167             return ERROR;
168         }
169
170         if ( StringUtils.isEmpty( name ) )
171         {
172             addActionError( getText( "cannot.edit.empty.permission" ) );
173             return ERROR;
174         }
175
176         try
177         {
178             Permission permission;
179             if ( manager.permissionExists( name ) )
180             {
181                 permission = manager.getPermission( name );
182             }
183             else
184             {
185                 permission = manager.createPermission( name );
186             }
187
188             permission.setDescription( description );
189
190             Operation operation = manager.createOperation( operationName );
191             if ( StringUtils.isNotEmpty( operationDescription ) )
192             {
193                 operation.setDescription( operationDescription );
194             }
195             permission.setOperation( manager.saveOperation( operation ) );
196
197             Resource resource = manager.createResource( resourceIdentifier );
198             permission.setResource( manager.saveResource( resource ) );
199
200             manager.savePermission( permission );
201
202             addActionMessage( getText( "save.permission.success", Arrays.asList( (Object) name ) ) );
203         }
204         catch ( RbacManagerException e )
205         {
206             addActionError( getText( "cannot.get.permission", Arrays.asList( (Object) name, e.getMessage() ) ) );
207             return ERROR;
208         }
209
210         return LIST;
211     }
212
213     // ------------------------------------------------------------------
214     // Parameter Accessor Methods
215     // ------------------------------------------------------------------
216
217     public String getDescription()
218     {
219         return description;
220     }
221
222     public void setDescription( String description )
223     {
224         this.description = description;
225     }
226
227     public String getName()
228     {
229         return name;
230     }
231
232     public void setName( String name )
233     {
234         this.name = name;
235     }
236
237     public String getOperationDescription()
238     {
239         return operationDescription;
240     }
241
242     public void setOperationDescription( String operationDescription )
243     {
244         this.operationDescription = operationDescription;
245     }
246
247     public String getOperationName()
248     {
249         return operationName;
250     }
251
252     public void setOperationName( String operationName )
253     {
254         this.operationName = operationName;
255     }
256
257     public String getResourceIdentifier()
258     {
259         return resourceIdentifier;
260     }
261
262     public void setResourceIdentifier( String resourceIdentifier )
263     {
264         this.resourceIdentifier = resourceIdentifier;
265     }
266
267     public List<Permission> getAllPermissions()
268     {
269         return allPermissions;
270     }
271
272     public void setAllPermissions( List<Permission> allPermissions )
273     {
274         this.allPermissions = allPermissions;
275     }
276
277     public SecureActionBundle initSecureActionBundle()
278         throws SecureActionException
279     {
280         SecureActionBundle bundle = new SecureActionBundle();
281         bundle.setRequiresAuthentication( true );
282         bundle.addRequiredAuthorization( RoleConstants.USER_MANAGEMENT_RBAC_ADMIN_OPERATION, Resource.GLOBAL );
283         return bundle;
284     }
285 }