001 /**
002 * Copyright 2004-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.hr.time.authorization;
017
018 import java.util.HashMap;
019 import java.util.HashSet;
020 import java.util.Map;
021 import java.util.Set;
022
023 import org.kuali.hr.time.roles.TkUserRoles;
024 import org.kuali.rice.kew.api.document.DocumentStatus;
025 import org.kuali.rice.kim.api.identity.Person;
026 import org.kuali.rice.kns.document.authorization.DocumentAuthorizer;
027 import org.kuali.rice.kns.document.authorization.MaintenanceDocumentAuthorizer;
028 import org.kuali.rice.krad.bo.BusinessObject;
029 import org.kuali.rice.krad.document.Document;
030 import org.kuali.rice.krad.maintenance.MaintenanceDocument;
031 import org.kuali.rice.krad.util.GlobalVariables;
032 import org.kuali.rice.krad.util.KRADConstants;
033
034 public class SystemAdminAuthorizer implements MaintenanceDocumentAuthorizer, DocumentAuthorizer {
035
036 public boolean isSystemAdmin(){
037 return TkUserRoles.getUserRoles(GlobalVariables.getUserSession().getPrincipalId()).isSystemAdmin();
038 }
039
040 public boolean isGlobalViewOnly(){
041 return TkUserRoles.getUserRoles(GlobalVariables.getUserSession().getPrincipalId()).isGlobalViewOnly();
042 }
043
044 @Override
045 public boolean canInitiate(String documentTypeName, Person user) {
046 return isSystemAdmin() || isGlobalViewOnly();
047 }
048
049 @Override
050 public boolean canOpen(Document document, Person user) {
051 return isSystemAdmin();
052 }
053
054 @Override
055 public boolean canReceiveAdHoc(Document document, Person user,
056 String actionRequestCode) {
057 return isSystemAdmin();
058 }
059
060 @Override
061 public boolean canAddNoteAttachment(Document document,
062 String attachmentTypeCode, Person user) {
063 return isSystemAdmin();
064 }
065
066 @Override
067 public boolean canDeleteNoteAttachment(Document document,
068 String attachmentTypeCode, String createdBySelfOnly, Person user) {
069 return isSystemAdmin();
070 }
071
072 @Override
073 public boolean canViewNoteAttachment(Document document,
074 String attachmentTypeCode, Person user) {
075 return isSystemAdmin();
076 }
077
078 @Override
079 public boolean canViewNoteAttachment(Document document,
080 String attachmentTypeCode, String authorUniversalIdentifier, Person user) {
081 return isSystemAdmin();
082 }
083
084 @Override
085 public boolean canSendAdHocRequests(Document document,
086 String actionRequestCd, Person user) {
087 return isSystemAdmin();
088 }
089
090 @Override
091 public boolean isAuthorized(BusinessObject businessObject,
092 String namespaceCode, String permissionName, String principalId) {
093 return isSystemAdmin();
094 }
095
096 @Override
097 public boolean isAuthorizedByTemplate(BusinessObject businessObject,
098 String namespaceCode, String permissionTemplateName,
099 String principalId) {
100 return isSystemAdmin();
101 }
102
103 @Override
104 public boolean isAuthorized(BusinessObject businessObject,
105 String namespaceCode, String permissionName, String principalId,
106 Map<String, String> additionalPermissionDetails,
107 Map<String, String> additionalRoleQualifiers) {
108 return isSystemAdmin();
109 }
110
111 @Override
112 public boolean isAuthorizedByTemplate(Object dataObject,
113 String namespaceCode, String permissionTemplateName,
114 String principalId,
115 Map<String, String> additionalPermissionDetails,
116 Map<String, String> additionalRoleQualifiers) {
117 return isSystemAdmin();
118 }
119
120 @Override
121 public Map<String, String> getCollectionItemRoleQualifications(
122 BusinessObject collectionItemBusinessObject) {
123 return new HashMap<String,String>();
124 }
125
126 @Override
127 public Map<String, String> getCollectionItemPermissionDetails(
128 BusinessObject collectionItemBusinessObject) {
129 return new HashMap<String,String>();
130 }
131
132 @Override
133 public Set<String> getSecurePotentiallyHiddenSectionIds() {
134 return new HashSet<String>();
135 }
136
137 @Override
138 public boolean canCreate(Class boClass, Person user) {
139 return isSystemAdmin();
140 }
141
142 @Override
143 public boolean canMaintain(Object dataObject, Person user) {
144 return isSystemAdmin();
145 }
146
147 @Override
148 public boolean canCreateOrMaintain(MaintenanceDocument maintenanceDocument,
149 Person user) {
150 return isSystemAdmin();
151 }
152
153 @Override
154 public Set<String> getSecurePotentiallyReadOnlySectionIds() {
155 return new HashSet<String>();
156 }
157
158 @Override
159 public boolean canEdit(Document document, Person user) {
160 return isSystemAdmin();
161 }
162
163 @Override
164 public boolean canAnnotate(Document document, Person user) {
165 return isSystemAdmin();
166 }
167
168 @Override
169 public boolean canReload(Document document, Person user) {
170 return isSystemAdmin();
171 }
172
173 @Override
174 public boolean canClose(Document document, Person user) {
175 return isSystemAdmin();
176 }
177
178 @Override
179 public boolean canSave(Document document, Person user) {
180 return isSystemAdmin();
181 }
182
183 @Override
184 public boolean canRoute(Document document, Person user) {
185 return isSystemAdmin();
186 }
187
188 @Override
189 public boolean canCancel(Document document, Person user) {
190 return isSystemAdmin();
191 }
192
193 @Override
194 public boolean canCopy(Document document, Person user) {
195 return isSystemAdmin();
196 }
197
198 @Override
199 public boolean canPerformRouteReport(Document document, Person user) {
200 return isSystemAdmin();
201 }
202
203 @Override
204 public boolean canBlanketApprove(Document document, Person user) {
205 return isSystemAdmin();
206 }
207
208 @Override
209 public boolean canApprove(Document document, Person user) {
210 return isSystemAdmin();
211 }
212
213 @Override
214 public boolean canDisapprove(Document document, Person user) {
215 return isSystemAdmin();
216 }
217
218 @Override
219 public boolean canSendNoteFyi(Document document, Person user) {
220 return isSystemAdmin();
221 }
222
223 @Override
224 public boolean canEditDocumentOverview(Document document, Person user) {
225 return isSystemAdmin();
226 }
227
228 @Override
229 public boolean canFyi(Document document, Person user) {
230 return isSystemAdmin();
231 }
232
233 @Override
234 public boolean canAcknowledge(Document document, Person user) {
235 return isSystemAdmin();
236 }
237
238 @Override
239 public boolean canSendAnyTypeAdHocRequests(Document document, Person user) {
240 return isSystemAdmin();
241 }
242
243 @Override
244 public boolean canTakeRequestedAction(Document document,
245 String actionRequestCode, Person user) {
246 return isSystemAdmin();
247 }
248
249 @Override
250 public boolean canRecall(Document document, Person user) {
251 return isSystemAdmin();
252 }
253
254 @Override
255 public boolean isAuthorized(Object dataObject, String namespaceCode,
256 String permissionName, String principalId) {
257 return isSystemAdmin();
258 }
259
260 @Override
261 public boolean isAuthorizedByTemplate(Object dataObject,
262 String namespaceCode, String permissionTemplateName,
263 String principalId) {
264 return isSystemAdmin();
265 }
266
267 @Override
268 public boolean isAuthorized(Object dataObject, String namespaceCode,
269 String permissionName, String principalId,
270 Map<String, String> additionalPermissionDetails,
271 Map<String, String> additionalRoleQualifiers) {
272 return isSystemAdmin();
273 }
274
275 /**
276 * Copied from org.kuali.rice.kns.document.authorization.DocumentAuthorizerBase
277 */
278 @Override
279 public Set<String> getDocumentActions(Document document, Person user, Set<String> documentActions) {
280 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_EDIT) && !canEdit(document, user)) {
281 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_EDIT);
282 }
283
284 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_COPY) && !canCopy(document, user)) {
285 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_COPY);
286 }
287
288 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_CLOSE) && !canClose(document, user)) {
289 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_CLOSE);
290 }
291
292 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_RELOAD) && !canReload(document, user)) {
293 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_RELOAD);
294 }
295
296 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_BLANKET_APPROVE) && !canBlanketApprove(document, user)) {
297 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_BLANKET_APPROVE);
298 }
299
300 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_CANCEL) && !canCancel(document, user)) {
301 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_CANCEL);
302 }
303
304 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_RECALL) && !canRecall(document, user)) {
305 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_RECALL);
306 }
307
308 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_SAVE) && !canSave(document, user)) {
309 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_SAVE);
310 }
311
312 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_ROUTE) && !canRoute(document, user)) {
313 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_ROUTE);
314 }
315
316 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_ACKNOWLEDGE) && !canAcknowledge(document, user)) {
317 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_ACKNOWLEDGE);
318 }
319
320 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_FYI) && !canFyi(document, user)) {
321 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_FYI);
322 }
323
324 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_APPROVE) && !canApprove(document, user)) {
325 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_APPROVE);
326 }
327
328 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_DISAPPROVE) && !canDisapprove(document, user)) {
329 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_DISAPPROVE);
330 }
331
332 if (!canSendAnyTypeAdHocRequests(document, user)) {
333 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_ADD_ADHOC_REQUESTS);
334 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_SEND_ADHOC_REQUESTS);
335 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_SEND_NOTE_FYI);
336 }
337
338 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_SEND_NOTE_FYI) && !canSendNoteFyi(document, user)) {
339 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_SEND_NOTE_FYI);
340 }
341
342 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_ANNOTATE) && !canAnnotate(document, user)) {
343 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_ANNOTATE);
344 }
345
346 if (documentActions.contains(KRADConstants.KUALI_ACTION_CAN_EDIT_DOCUMENT_OVERVIEW) && !canEditDocumentOverview(
347 document, user)) {
348 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_EDIT_DOCUMENT_OVERVIEW);
349 }
350
351 if (documentActions.contains(KRADConstants.KUALI_ACTION_PERFORM_ROUTE_REPORT) && !canPerformRouteReport(document,
352 user)) {
353 documentActions.remove(KRADConstants.KUALI_ACTION_PERFORM_ROUTE_REPORT);
354 }
355
356 DocumentStatus documentStatus = document.getDocumentHeader().getWorkflowDocument().getStatus();
357
358 if (DocumentStatus.INITIATED.equals(documentStatus) || DocumentStatus.SAVED.equals(documentStatus)) {
359 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_APPROVE);
360 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_DISAPPROVE);
361 } else if (DocumentStatus.FINAL.equals(documentStatus)) {
362 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_APPROVE);
363 documentActions.remove(KRADConstants.KUALI_ACTION_CAN_DISAPPROVE);
364 }
365
366 return documentActions;
367 }
368
369 }