/krad/krad-web-framework/src/main/java/org/kuali/rice/krad/uif/authorization/AuthorizerBase.java

https://github.com/sbower/kuali-rice-1 · Java · 257 lines · 146 code · 32 blank · 79 comment · 18 complexity · 65025501f1f017ccc376f1cb990a5db5 MD5 · raw file

  1. /*
  2. * Copyright 2011 The Kuali Foundation
  3. *
  4. * Licensed under the Educational Community License, Version 1.0 (the
  5. * "License"); 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/ecl1.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, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package org.kuali.rice.krad.uif.authorization;
  17. import org.kuali.rice.kim.api.KimConstants;
  18. import org.kuali.rice.kim.api.identity.Person;
  19. import org.kuali.rice.kim.api.identity.PersonService;
  20. import org.kuali.rice.kim.api.permission.PermissionService;
  21. import org.kuali.rice.kim.api.services.KimApiServiceLocator;
  22. import org.kuali.rice.krad.service.DataDictionaryService;
  23. import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
  24. import org.kuali.rice.krad.service.KualiModuleService;
  25. import org.kuali.rice.krad.util.GlobalVariables;
  26. import org.kuali.rice.krad.util.KRADUtils;
  27. import org.kuali.rice.krad.web.form.UifFormBase;
  28. import java.util.HashMap;
  29. import java.util.HashSet;
  30. import java.util.Map;
  31. import java.util.Set;
  32. /**
  33. * @author Kuali Rice Team (rice.collab@kuali.org)
  34. */
  35. public class AuthorizerBase implements Authorizer {
  36. private static PermissionService permissionService;
  37. private static PersonService personService;
  38. private static KualiModuleService kualiModuleService;
  39. private static DataDictionaryService dataDictionaryService;
  40. /**
  41. * @see org.kuali.rice.krad.uif.authorization.Authorizer#getActionFlags(org.kuali.rice.krad.web.form.UifFormBase,
  42. * org.kuali.rice.kim.api.identity.Person, java.util.Set)
  43. */
  44. public Set<String> getActionFlags(UifFormBase model, Person user, Set<String> documentActions) {
  45. return documentActions;
  46. }
  47. /**
  48. * @see org.kuali.rice.krad.uif.authorization.Authorizer#getEditModes(org.kuali.rice.krad.web.form.UifFormBase,
  49. * org.kuali.rice.kim.api.identity.Person, java.util.Set)
  50. */
  51. public Set<String> getEditModes(UifFormBase model, Person user, Set<String> editModes) {
  52. return editModes;
  53. }
  54. /**
  55. * @see org.kuali.rice.krad.uif.authorization.Authorizer#getSecurePotentiallyHiddenGroupIds()
  56. */
  57. public Set<String> getSecurePotentiallyHiddenGroupIds() {
  58. return new HashSet<String>();
  59. }
  60. /**
  61. * @see org.kuali.rice.krad.uif.authorization.Authorizer#getSecurePotentiallyReadOnlyGroupIds()
  62. */
  63. public Set<String> getSecurePotentiallyReadOnlyGroupIds() {
  64. return new HashSet<String>();
  65. }
  66. /**
  67. * Override this method to populate the role qualifier attributes from the
  68. * primary data object or document. This will only be called once per
  69. * request.
  70. *
  71. * @param primaryDataObjectOrDocument
  72. * - the primary data object (i.e. the main object instance
  73. * behind the lookup result row or inquiry) or the document
  74. * @param attributes
  75. * - role qualifiers will be added to this map
  76. */
  77. protected void addRoleQualification(Object primaryDataObjectOrDocument, Map<String, String> attributes) {
  78. addStandardAttributes(primaryDataObjectOrDocument, attributes);
  79. }
  80. /**
  81. * Override this method to populate the permission details from the primary
  82. * data object or document. This will only be called once per request.
  83. *
  84. * @param primaryDataObjectOrDocument
  85. * - the primary data object (i.e. the main object instance
  86. * behind the lookup result row or inquiry) or the document
  87. * @param attributes
  88. * - permission details will be added to this map
  89. */
  90. protected void addPermissionDetails(Object primaryDataObjectOrDocument, Map<String, String> attributes) {
  91. addStandardAttributes(primaryDataObjectOrDocument, attributes);
  92. }
  93. /**
  94. * @param primaryDataObjectOrDocument
  95. * - the primary data object (i.e. the main object instance
  96. * behind the lookup result row or inquiry) or the document
  97. * @param attributes
  98. * - attributes (i.e. role qualifications or permission details)
  99. * will be added to this map
  100. */
  101. private void addStandardAttributes(Object primaryDataObjectOrDocument, Map<String, String> attributes) {
  102. attributes.putAll(KRADUtils.getNamespaceAndComponentSimpleName(primaryDataObjectOrDocument.getClass()));
  103. }
  104. protected final boolean permissionExistsByTemplate(Object dataObject, String namespaceCode,
  105. String permissionTemplateName) {
  106. return getPermissionService().isPermissionDefinedByTemplateName(namespaceCode, permissionTemplateName,
  107. new HashMap<String, String>(getPermissionDetailValues(dataObject)));
  108. }
  109. protected final boolean permissionExistsByTemplate(String namespaceCode, String permissionTemplateName,
  110. Map<String, String> permissionDetails) {
  111. return getPermissionService().isPermissionDefinedByTemplateName(namespaceCode, permissionTemplateName,
  112. new HashMap<String, String>(permissionDetails));
  113. }
  114. protected final boolean permissionExistsByTemplate(Object dataObject, String namespaceCode,
  115. String permissionTemplateName, Map<String, String> permissionDetails) {
  116. Map<String, String> combinedPermissionDetails = new HashMap<String, String>(getPermissionDetailValues(dataObject));
  117. combinedPermissionDetails.putAll(permissionDetails);
  118. return getPermissionService().isPermissionDefinedByTemplateName(namespaceCode, permissionTemplateName,
  119. combinedPermissionDetails);
  120. }
  121. public final boolean isAuthorized(Object dataObject, String namespaceCode, String permissionName, String principalId) {
  122. return getPermissionService().isAuthorized(principalId, namespaceCode, permissionName,
  123. new HashMap<String, String>(getPermissionDetailValues(dataObject)),
  124. new HashMap<String, String>(getRoleQualification(dataObject, principalId)));
  125. }
  126. public final boolean isAuthorizedByTemplate(Object dataObject, String namespaceCode, String permissionTemplateName,
  127. String principalId) {
  128. return getPermissionService().isAuthorizedByTemplateName(principalId, namespaceCode,
  129. permissionTemplateName, new HashMap<String, String>(getPermissionDetailValues(dataObject)),
  130. new HashMap<String, String>((getRoleQualification(dataObject, principalId))));
  131. }
  132. public final boolean isAuthorized(Object dataObject, String namespaceCode, String permissionName,
  133. String principalId, Map<String, String> collectionOrFieldLevelPermissionDetails,
  134. Map<String, String> collectionOrFieldLevelRoleQualification) {
  135. Map<String, String> roleQualifiers;
  136. Map<String, String> permissionDetails;
  137. if (collectionOrFieldLevelRoleQualification != null) {
  138. roleQualifiers = new HashMap<String, String>(getRoleQualification(dataObject, principalId));
  139. roleQualifiers.putAll(collectionOrFieldLevelRoleQualification);
  140. }
  141. else {
  142. roleQualifiers = new HashMap<String, String>(getRoleQualification(dataObject, principalId));
  143. }
  144. if (collectionOrFieldLevelPermissionDetails != null) {
  145. permissionDetails = new HashMap<String, String>(getPermissionDetailValues(dataObject));
  146. permissionDetails.putAll(collectionOrFieldLevelPermissionDetails);
  147. }
  148. else {
  149. permissionDetails = new HashMap<String, String>(getPermissionDetailValues(dataObject));
  150. }
  151. return getPermissionService().isAuthorized(principalId, namespaceCode, permissionName,
  152. permissionDetails, roleQualifiers);
  153. }
  154. public final boolean isAuthorizedByTemplate(Object dataObject, String namespaceCode, String permissionTemplateName,
  155. String principalId, Map<String, String> collectionOrFieldLevelPermissionDetails,
  156. Map<String, String> collectionOrFieldLevelRoleQualification) {
  157. Map<String, String> roleQualifiers = new HashMap<String, String>(getRoleQualification(dataObject, principalId));
  158. Map<String, String> permissionDetails = new HashMap<String, String>(getPermissionDetailValues(dataObject));
  159. if (collectionOrFieldLevelRoleQualification != null) {
  160. roleQualifiers.putAll(collectionOrFieldLevelRoleQualification);
  161. }
  162. if (collectionOrFieldLevelPermissionDetails != null) {
  163. permissionDetails.putAll(collectionOrFieldLevelPermissionDetails);
  164. }
  165. return getPermissionService().isAuthorizedByTemplateName(principalId, namespaceCode,
  166. permissionTemplateName, permissionDetails, roleQualifiers);
  167. }
  168. /**
  169. * Returns a role qualification map based off data from the primary business
  170. * object or the document. DO NOT MODIFY THE MAP RETURNED BY THIS METHOD
  171. *
  172. * @param primaryDataObjectOrDocument
  173. * the primary data object (i.e. the main object instance behind
  174. * the lookup result row or inquiry) or the document
  175. * @return a Map containing role qualifications
  176. */
  177. protected final Map<String, String> getRoleQualification(Object primaryDataObjectOrDocument) {
  178. return getRoleQualification(primaryDataObjectOrDocument, GlobalVariables.getUserSession().getPerson()
  179. .getPrincipalId());
  180. }
  181. protected final Map<String, String> getRoleQualification(Object primaryDataObjectOrDocument, String principalId) {
  182. Map<String, String> roleQualification = new HashMap<String, String>();
  183. addRoleQualification(primaryDataObjectOrDocument, roleQualification);
  184. roleQualification.put(KimConstants.AttributeConstants.PRINCIPAL_ID, principalId);
  185. return roleQualification;
  186. }
  187. /**
  188. * Returns a permission details map based off data from the primary business
  189. * object or the document. DO NOT MODIFY THE MAP RETURNED BY THIS METHOD
  190. *
  191. * @param primaryDataObjectOrDocument
  192. * the primary data object (i.e. the main object instance behind
  193. * the lookup result row or inquiry) or the document
  194. * @return a Map containing permission details
  195. */
  196. protected final Map<String, String> getPermissionDetailValues(Object primaryDataObjectOrDocument) {
  197. Map<String, String> permissionDetails = new HashMap<String, String>();
  198. addPermissionDetails(primaryDataObjectOrDocument, permissionDetails);
  199. return permissionDetails;
  200. }
  201. protected static final PermissionService getPermissionService() {
  202. if (permissionService == null) {
  203. permissionService = KimApiServiceLocator.getPermissionService();
  204. }
  205. return permissionService;
  206. }
  207. protected static final PersonService getPersonService() {
  208. if (personService == null) {
  209. personService = KimApiServiceLocator.getPersonService();
  210. }
  211. return personService;
  212. }
  213. protected static final KualiModuleService getKualiModuleService() {
  214. if (kualiModuleService == null) {
  215. kualiModuleService = KRADServiceLocatorWeb.getKualiModuleService();
  216. }
  217. return kualiModuleService;
  218. }
  219. protected static final DataDictionaryService getDataDictionaryService() {
  220. if (dataDictionaryService == null) {
  221. dataDictionaryService = KRADServiceLocatorWeb.getDataDictionaryService();
  222. }
  223. return dataDictionaryService;
  224. }
  225. }