1 package org.apache.turbine.util;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import org.apache.fulcrum.security.SecurityService;
25 import org.apache.fulcrum.security.entity.Permission;
26 import org.apache.fulcrum.security.entity.Role;
27 import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
28 import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
29 import org.apache.fulcrum.security.util.RoleSet;
30 import org.apache.fulcrum.security.util.UnknownEntityException;
31 import org.apache.turbine.services.TurbineServices;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class SecurityCheck
50 {
51 private String message;
52
53 private String failScreen;
54
55 private RunData data = null;
56
57 private SecurityService securityService = null;
58
59
60
61
62
63 private boolean initialize;
64
65
66
67
68
69
70
71
72 public SecurityCheck(RunData data,
73 String message,
74 String failedScreen)
75 {
76 this(data, message, failedScreen, false);
77 }
78
79
80
81
82
83
84
85
86
87
88
89
90
91 public SecurityCheck(RunData data, String message, String failedScreen, boolean initialize)
92 {
93 this.data = data;
94 this.message = message;
95 this.failScreen = failedScreen;
96 this.initialize = initialize;
97 this.securityService = (SecurityService)TurbineServices
98 .getInstance()
99 .getService(SecurityService.ROLE);
100 }
101
102
103
104
105
106
107
108
109 public boolean hasRole(Role role)
110 throws Exception
111 {
112 boolean value = false;
113 TurbineAccessControlList acl = data.getACL();
114 if (acl == null ||
115 !acl.hasRole(role))
116 {
117 data.setScreen(failScreen);
118 data.setMessage(message);
119 }
120 else
121 {
122 value = true;
123 }
124 return value;
125 }
126
127
128
129
130
131
132
133
134
135
136 public boolean hasRole(String role) throws Exception
137 {
138 Role roleObject = null;
139
140 try
141 {
142 roleObject = securityService.getRoleManager().getRoleByName(role);
143 }
144 catch (UnknownEntityException e)
145 {
146 if(initialize)
147 {
148 roleObject = securityService.getRoleManager().getRoleInstance(role);
149 securityService.getRoleManager().addRole(roleObject);
150 TurbineModelManager modelManager = (TurbineModelManager)securityService.getModelManager();
151 modelManager.grant(data.getUser(), modelManager.getGlobalGroup(), roleObject);
152 }
153 else
154 {
155 throw(e);
156 }
157 }
158
159 return hasRole(roleObject);
160 }
161
162
163
164
165
166
167
168
169 public boolean hasPermission(Permission permission)
170 throws Exception
171 {
172 boolean value = false;
173 TurbineAccessControlList acl = data.getACL();
174 if (acl == null ||
175 !acl.hasPermission(permission))
176 {
177 data.setScreen(failScreen);
178 data.setMessage(message);
179 }
180 else
181 {
182 value = true;
183 }
184 return value;
185 }
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 public boolean hasPermission(String permission)
202 throws Exception
203 {
204 Permission permissionObject = null;
205 try
206 {
207 permissionObject = securityService.getPermissionManager().getPermissionByName(permission);
208 }
209 catch (UnknownEntityException e)
210 {
211 if(initialize)
212 {
213 permissionObject = securityService.getPermissionManager().getPermissionInstance(permission);
214 securityService.getPermissionManager().addPermission(permissionObject);
215
216 Role role = null;
217 TurbineAccessControlList acl = data.getACL();
218 RoleSet roles = acl.getRoles();
219 if(roles.size() > 0)
220 {
221 role = roles.toArray(new Role[0])[0];
222 }
223
224 if(role == null)
225 {
226
227
228
229
230 roles = securityService.getRoleManager().getAllRoles();
231 if(roles.size() > 0)
232 {
233 role = roles.toArray(new Role[0])[0];
234 }
235 }
236
237 if(role != null)
238 {
239
240
241
242
243 TurbineModelManager modelManager = (TurbineModelManager)securityService.getModelManager();
244 modelManager.grant(role, permissionObject);
245 }
246 }
247 else
248 {
249 throw(e);
250 }
251 }
252
253 return hasPermission(permissionObject);
254 }
255
256
257
258
259
260
261
262 public String getMessage()
263 {
264 return message;
265 }
266
267
268
269
270
271
272
273 public String getFailScreen()
274 {
275 return failScreen;
276 }
277 }