1 /** 2 * Copyright 2004-2013 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.kpme.core.service.permission; 17 18 import java.util.HashMap; 19 import java.util.List; 20 import java.util.Map; 21 22 import org.joda.time.DateTime; 23 import org.kuali.kpme.core.assignment.Assignment; 24 import org.kuali.kpme.core.department.Department; 25 import org.kuali.kpme.core.department.service.DepartmentService; 26 import org.kuali.kpme.core.role.KPMERoleMemberAttribute; 27 import org.kuali.kpme.core.workarea.WorkArea; 28 import org.kuali.kpme.core.workarea.service.WorkAreaService; 29 import org.kuali.rice.kew.api.document.DocumentStatus; 30 import org.kuali.rice.kim.api.KimConstants; 31 32 public abstract class HrPermissionServiceBase { 33 34 private DepartmentService departmentService; 35 private WorkAreaService workAreaService; 36 37 /** 38 * Checks whether the given {@code principalId} is authorized to perform {@code permissionName} for the given role qualifications. 39 * 40 * @param principalId The person to check the permission for 41 * @param permissionName The name of the permission 42 * @param qualification The map of role qualifiers for the person 43 * @param asOfDate The effective date of the permission 44 * 45 * @return true if {@code principalId} is authorized to perform {@code permissionName}, false otherwise. 46 */ 47 public abstract boolean isAuthorized(String principalId, String permissionName, Map<String, String> qualification, DateTime asOfDate); 48 49 /** 50 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given permission details and role qualifications. 51 * 52 * @param principalId The person to check the permission for 53 * @param namespaceCode The namespace for the permission template 54 * @param permissionTemplateName The name of the permission template 55 * @param permissionDetails The map of permission details for the permission 56 * @param qualification The map of role qualifiers for the person 57 * @param asOfDate The effective date of the permission 58 * 59 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName}, false otherwise. 60 */ 61 public abstract boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName, Map<String, String> permissionDetails, Map<String, String> qualification, DateTime asOfDate); 62 63 /** 64 * Checks whether the given {@code principalId} is authorized to perform {@code permissionName} for the given work area. 65 * 66 * @param principalId The person to check the permission for 67 * @param permissionName The name of the permission 68 * @param workArea The work area qualifier 69 * @param asOfDate The effective date of the permission 70 * 71 * @return true if {@code principalId} is authorized to perform {@code permissionName} for the given work area, false otherwise. 72 */ 73 public boolean isAuthorizedInWorkArea(String principalId, String permissionName, Long workArea, DateTime asOfDate) { 74 Map<String, String> qualification = new HashMap<String, String>(); 75 qualification.put(KPMERoleMemberAttribute.WORK_AREA.getRoleMemberAttributeName(), String.valueOf(workArea)); 76 77 return isAuthorized(principalId, permissionName, qualification, asOfDate); 78 } 79 80 /** 81 * Checks whether the given {@code principalId} is authorized to perform {@code permissionName} for the given department. 82 * 83 * @param principalId The person to check the permission for 84 * @param permissionName The name of the permission 85 * @param department The department qualifier 86 * @param asOfDate The effective date of the permission 87 * 88 * @return true if {@code principalId} is authorized to perform {@code permissionName} for the given department, false otherwise. 89 */ 90 public boolean isAuthorizedInDepartment(String principalId, String permissionName, String department, DateTime asOfDate) { 91 Map<String, String> qualification = new HashMap<String, String>(); 92 qualification.put(KPMERoleMemberAttribute.DEPARTMENT.getRoleMemberAttributeName(), department); 93 94 return isAuthorized(principalId, permissionName, qualification, asOfDate); 95 } 96 97 /** 98 * Checks whether the given {@code principalId} is authorized to perform {@code permissionName} for the given location. 99 * 100 * @param principalId The person to check the permission for 101 * @param permissionName The name of the permission 102 * @param location The location qualifier 103 * @param asOfDate The effective date of the permission 104 * 105 * @return true if {@code principalId} is authorized to perform {@code permissionName} for the given location, false otherwise. 106 */ 107 public boolean isAuthorizedInLocation(String principalId, String permissionName, String location, DateTime asOfDate) { 108 Map<String, String> qualification = new HashMap<String, String>(); 109 qualification.put(KPMERoleMemberAttribute.LOCATION.getRoleMemberAttributeName(), location); 110 111 return isAuthorized(principalId, permissionName, qualification, asOfDate); 112 } 113 114 /** 115 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given work area. 116 * 117 * @param principalId The person to check the permission for 118 * @param namespaceCode The namespace for the permission template 119 * @param permissionTemplateName The name of the permission template 120 * @param workArea The work area qualifier 121 * @param asOfDate The effective date of the permission 122 * 123 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given work area, false otherwise. 124 */ 125 public boolean isAuthorizedByTemplateInWorkArea(String principalId, String namespaceCode, String permissionTemplateName, Long workArea, DateTime asOfDate) { 126 Map<String, String> permissionDetails = new HashMap<String, String>(); 127 128 Map<String, String> qualification = new HashMap<String, String>(); 129 qualification.put(KPMERoleMemberAttribute.WORK_AREA.getRoleMemberAttributeName(), String.valueOf(workArea)); 130 131 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, permissionDetails, qualification, asOfDate); 132 } 133 134 /** 135 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given department. 136 * 137 * @param principalId The person to check the permission for 138 * @param namespaceCode The namespace for the permission template 139 * @param permissionTemplateName The name of the permission template 140 * @param department The department qualifier 141 * @param asOfDate The effective date of the permission 142 * 143 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given department, false otherwise. 144 */ 145 public boolean isAuthorizedByTemplateInDepartment(String principalId, String namespaceCode, String permissionTemplateName, String department, DateTime asOfDate) { 146 Map<String, String> permissionDetails = new HashMap<String, String>(); 147 148 Map<String, String> qualification = new HashMap<String, String>(); 149 qualification.put(KPMERoleMemberAttribute.DEPARTMENT.getRoleMemberAttributeName(), department); 150 151 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, permissionDetails, qualification, asOfDate); 152 } 153 154 /** 155 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given location. 156 * 157 * @param principalId The person to check the permission for 158 * @param namespaceCode The namespace for the permission template 159 * @param permissionTemplateName The name of the permission template 160 * @param location The location qualifier 161 * @param asOfDate The effective date of the permission 162 * 163 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given location, false otherwise. 164 */ 165 public boolean isAuthorizedByTemplateInLocation(String principalId, String namespaceCode, String permissionTemplateName, String location, DateTime asOfDate) { 166 Map<String, String> permissionDetails = new HashMap<String, String>(); 167 168 Map<String, String> qualification = new HashMap<String, String>(); 169 qualification.put(KPMERoleMemberAttribute.LOCATION.getRoleMemberAttributeName(), location); 170 171 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, permissionDetails, qualification, asOfDate); 172 } 173 174 /** 175 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information. 176 * 177 * @param principalId The person to check the permission for 178 * @param namespaceCode The namespace for the permission template 179 * @param permissionTemplateName The name of the permission template 180 * @param documentTypeName The type of the document 181 * @param documentId The id of the document 182 * @param documentStatus The status of the document 183 * @param assignments The list of assignments associated with the document 184 * 185 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information, false otherwise. 186 */ 187 protected boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName, String documentTypeName, String documentId, DocumentStatus documentStatus, List<Assignment> assignments) { 188 boolean isAuthorized = false; 189 190 for (Assignment assignment : assignments) { 191 if (isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, documentTypeName, documentId, documentStatus, assignment)) { 192 isAuthorized = true; 193 break; 194 } 195 } 196 197 return isAuthorized; 198 } 199 200 /** 201 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information. 202 * 203 * @param principalId The person to check the permission for 204 * @param namespaceCode The namespace for the permission template 205 * @param permissionTemplateName The name of the permission template 206 * @param documentTypeName The type of the document 207 * @param documentId The id of the document 208 * @param documentStatus The status of the document 209 * @param assignment The assignment associated with the document 210 * 211 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information, false otherwise. 212 */ 213 protected boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName, String documentTypeName, String documentId, DocumentStatus documentStatus, Assignment assignment) { 214 boolean isAuthorized = false; 215 216 Long workArea = assignment.getWorkArea(); 217 WorkArea workAreaObj = getWorkAreaService().getWorkArea(workArea, assignment.getEffectiveLocalDate()); 218 219 String department = workAreaObj != null ? workAreaObj.getDept() : null; 220 Department departmentObj = getDepartmentService().getDepartment(department, assignment.getEffectiveLocalDate()); 221 222 String location = departmentObj != null ? departmentObj.getLocation() : null; 223 224 if (isAuthorizedByTemplateInWorkArea(principalId, namespaceCode, permissionTemplateName, workArea, documentTypeName, documentId, documentStatus, assignment.getEffectiveLocalDate().toDateTimeAtStartOfDay()) 225 || isAuthorizedByTemplateInDepartment(principalId, namespaceCode, permissionTemplateName, department, documentTypeName, documentId, documentStatus, assignment.getEffectiveLocalDate().toDateTimeAtStartOfDay()) 226 || isAuthorizedByTemplateInLocation(principalId, namespaceCode, permissionTemplateName, location, documentTypeName, documentId, documentStatus, assignment.getEffectiveLocalDate().toDateTimeAtStartOfDay())) { 227 isAuthorized = true; 228 } 229 230 return isAuthorized; 231 } 232 233 /** 234 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information. 235 * 236 * @param principalId The person to check the permission for 237 * @param namespaceCode The namespace for the permission template 238 * @param permissionTemplateName The name of the permission template 239 * @param documentTypeName The type of the document 240 * @param documentId The id of the document 241 * @param documentStatus The status of the document 242 * @param asOfDate The effective date of the permission 243 * 244 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information, false otherwise. 245 */ 246 protected boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName, String documentTypeName, String documentId, DocumentStatus documentStatus, DateTime asOfDate) { 247 Map<String, String> qualification = new HashMap<String, String>(); 248 249 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, documentTypeName, documentId, documentStatus, qualification, asOfDate); 250 } 251 252 /** 253 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given work area and document information. 254 * 255 * @param principalId The person to check the permission for 256 * @param namespaceCode The namespace for the permission template 257 * @param permissionTemplateName The name of the permission template 258 * @param workArea The work area qualifier 259 * @param documentTypeName The type of the document 260 * @param documentId The id of the document 261 * @param documentStatus The status of the document 262 * @param asOfDate The effective date of the permission 263 * 264 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given work area and document information, false otherwise. 265 */ 266 protected boolean isAuthorizedByTemplateInWorkArea(String principalId, String namespaceCode, String permissionTemplateName, Long workArea, String documentTypeName, String documentId, DocumentStatus documentStatus, DateTime asOfDate) { 267 Map<String, String> qualification = new HashMap<String, String>(); 268 qualification.put(KPMERoleMemberAttribute.WORK_AREA.getRoleMemberAttributeName(), String.valueOf(workArea)); 269 270 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, documentTypeName, documentId, documentStatus, qualification, asOfDate); 271 } 272 273 /** 274 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given department and document information. 275 * 276 * @param principalId The person to check the permission for 277 * @param namespaceCode The namespace for the permission template 278 * @param permissionTemplateName The name of the permission template 279 * @param department The department qualifier 280 * @param documentTypeName The type of the document 281 * @param documentId The id of the document 282 * @param documentStatus The status of the document 283 * @param asOfDate The effective date of the permission 284 * 285 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given department and document information, false otherwise. 286 */ 287 protected boolean isAuthorizedByTemplateInDepartment(String principalId, String namespaceCode, String permissionTemplateName, String department, String documentTypeName, String documentId, DocumentStatus documentStatus, DateTime asOfDate) { 288 Map<String, String> qualification = new HashMap<String, String>(); 289 qualification.put(KPMERoleMemberAttribute.DEPARTMENT.getRoleMemberAttributeName(), department); 290 291 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, documentTypeName, documentId, documentStatus, qualification, asOfDate); 292 } 293 294 /** 295 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given location and document information. 296 * 297 * @param principalId The person to check the permission for 298 * @param namespaceCode The namespace for the permission template 299 * @param permissionTemplateName The name of the permission template 300 * @param location The location qualifier 301 * @param documentTypeName The type of the document 302 * @param documentId The id of the document 303 * @param documentStatus The status of the document 304 * @param asOfDate The effective date of the permission 305 * 306 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given location and document information, false otherwise. 307 */ 308 protected boolean isAuthorizedByTemplateInLocation(String principalId, String namespaceCode, String permissionTemplateName, String location, String documentTypeName, String documentId, DocumentStatus documentStatus, DateTime asOfDate) { 309 Map<String, String> qualification = new HashMap<String, String>(); 310 qualification.put(KPMERoleMemberAttribute.LOCATION.getRoleMemberAttributeName(), location); 311 312 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, documentTypeName, documentId, documentStatus, qualification, asOfDate); 313 } 314 315 /** 316 * Checks whether the given {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information and role qualifiers. 317 * 318 * @param principalId The person to check the permission for 319 * @param namespaceCode The namespace for the permission template 320 * @param permissionTemplateName The name of the permission template 321 * @param documentTypeName The type of the document 322 * @param documentId The id of the document 323 * @param documentStatus The status of the document 324 * @param qualification The map of role qualifiers for the person 325 * @param asOfDate The effective date of the permission 326 * 327 * @return true if {@code principalId} is authorized to perform any permission templated by {@code permissionTemplateName} for the given document information and role qualifiers, false otherwise. 328 */ 329 protected boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName, String documentTypeName, String documentId, DocumentStatus documentStatus, Map<String, String> qualification, DateTime asOfDate) { 330 qualification.put(KimConstants.AttributeConstants.DOCUMENT_NUMBER, documentId); 331 332 Map<String, String> permissionDetails = new HashMap<String, String>(); 333 permissionDetails.put(KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME, documentTypeName); 334 permissionDetails.put(KimConstants.AttributeConstants.ROUTE_STATUS_CODE, documentStatus.getCode()); 335 336 return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, permissionDetails, qualification, asOfDate); 337 } 338 339 public DepartmentService getDepartmentService() { 340 return departmentService; 341 } 342 343 public void setDepartmentService(DepartmentService departmentService) { 344 this.departmentService = departmentService; 345 } 346 347 public WorkAreaService getWorkAreaService() { 348 return workAreaService; 349 } 350 351 public void setWorkAreaService(WorkAreaService workAreaService) { 352 this.workAreaService = workAreaService; 353 } 354 355 }