PermissionAspectUtil.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package jnpf.util;
  2. import jnpf.constant.PermissionConstant;
  3. import jnpf.permission.entity.OrganizeAdministratorEntity;
  4. import jnpf.permission.entity.OrganizeEntity;
  5. import jnpf.permission.service.OrganizeAdministratorService;
  6. import jnpf.permission.service.OrganizeService;
  7. import jnpf.util.context.SpringContext;
  8. /**
  9. * 分级管理工具类
  10. *
  11. * @author JNPF开发平台组
  12. * @version V3.1.0
  13. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  14. * @date 2021-11-01
  15. */
  16. public class PermissionAspectUtil {
  17. private static final OrganizeService organizeService;
  18. private static final OrganizeAdministratorService organizeAdministratorService;
  19. static {
  20. organizeService = SpringContext.getBean(OrganizeService.class);
  21. organizeAdministratorService = SpringContext.getBean(OrganizeAdministratorService.class);
  22. }
  23. /**
  24. * 判断是否存在修改前所在的组织的操作
  25. *
  26. * @param targetUserId 被操作目标对象ID
  27. * @param operatorUsrId 操作者ID
  28. * @param methodName 操作方法
  29. */
  30. public static Boolean getPermitByUserId(String targetUserId, String operatorUsrId, String methodName) {
  31. for(OrganizeEntity organizeEntity : organizeService.getAllOrgByUserId(targetUserId)){
  32. if (PermissionAspectUtil.containPermission(organizeEntity.getId(), operatorUsrId, methodName)) {
  33. return true;
  34. }
  35. }
  36. return false;
  37. }
  38. /**
  39. * 判断 操作者是否含有该组织的操作权限
  40. *
  41. * @param organizeId 被操作者所在组织ID
  42. * @param operatorUserId 当前操作者用户对象ID
  43. * @param methodName 操作类型:创建、编辑、删除
  44. */
  45. public static boolean containPermission(String organizeId, String operatorUserId, String methodName) {
  46. OrganizeEntity organizeEntity = organizeService.getInfo(organizeId);
  47. if (organizeEntity != null) {
  48. // 当前用户的所有分级权限
  49. OrganizeAdministratorEntity adminEntity = organizeAdministratorService.getOne(operatorUserId, organizeId);
  50. if(permissionFlag(adminEntity, methodName, true)){
  51. return true;
  52. }
  53. // 查看父级的组织权限是否含有子集权限
  54. return parentPermission(organizeEntity.getParentId(), methodName, operatorUserId);
  55. }
  56. return false;
  57. }
  58. /**
  59. * 判断是否存在修改前所在的组织的操作(拥有所有的组织权限才能操作)
  60. *
  61. * @param organizeIds 组织ID集合字符串
  62. * @param operatorUsrId 操作者ID
  63. * @param methodName 操作方法
  64. */
  65. public static Boolean getPermitByOrgIds(String organizeIds, String operatorUsrId, String methodName) {
  66. boolean flag = true;
  67. for (String organizeId : organizeIds.split(",")) {
  68. flag = true;
  69. flag = PermissionAspectUtil.containPermission(organizeId, operatorUsrId, methodName);
  70. if (!flag) {
  71. break;
  72. }
  73. }
  74. return flag;
  75. }
  76. /**
  77. * 判断是否可修改所在的组织的操作(只要有一个权限即可操作)
  78. *
  79. * @param organizeIds 组织ID集合字符串
  80. * @param operatorUsrId 操作者ID
  81. * @param methodName 操作方法
  82. */
  83. public static Boolean getPermitByOrgId(String organizeIds, String operatorUsrId, String methodName) {
  84. for (String organizeId : organizeIds.split(",")) {
  85. if (PermissionAspectUtil.containPermission(organizeId,operatorUsrId, methodName)) {
  86. return true;
  87. }
  88. }
  89. return false;
  90. }
  91. /**
  92. * 判断组织新建权限(从父级给的子集新建操作权限)
  93. *
  94. * @param organizeParentId
  95. * @param methodName
  96. * @param userId
  97. * @return
  98. */
  99. private static boolean parentPermission(String organizeParentId, String methodName, String userId) {
  100. // 得到父级组织
  101. OrganizeEntity parentOrganizeEntity = organizeService.getInfo(organizeParentId);
  102. if (parentOrganizeEntity != null) {
  103. // 得到父级的权限
  104. if(permissionFlag(organizeAdministratorService.getOne(userId, parentOrganizeEntity.getId()), methodName, false)){
  105. return true;
  106. }
  107. // 当前正在判断的组织已经是顶级则无需递归
  108. if (!"-1".equals(parentOrganizeEntity.getParentId())) {
  109. return parentPermission(parentOrganizeEntity.getParentId(), methodName, userId);
  110. }
  111. }
  112. return false;
  113. }
  114. /**
  115. * 判断是否具有权限
  116. * @param adminEntity 分级管理对象
  117. * @param methodName 操作类型:创建、编辑、删除
  118. * @param thisFlag true:当前组织 false:子组织
  119. */
  120. private static boolean permissionFlag(OrganizeAdministratorEntity adminEntity, String methodName, Boolean thisFlag) {
  121. if (adminEntity != null) {
  122. String methodType = "";
  123. // 存在则验证是否有当前组织分级管理
  124. try {
  125. switch (methodName) {
  126. case PermissionConstant.METHOD_CREATE:
  127. // 创建权限
  128. methodType = PermissionConstant.GET_METHOD_CREATE;
  129. break;
  130. case PermissionConstant.METHOD_UPDATE:
  131. // 编辑权限
  132. methodType = PermissionConstant.GET_METHOD_UPDATE;
  133. break;
  134. case PermissionConstant.METHOD_DELETE:
  135. // 删除权限
  136. methodType = PermissionConstant.GET_METHOD_DELETE;
  137. break;
  138. default:
  139. break;
  140. }
  141. // 拼接方法名
  142. String method = (thisFlag ? PermissionConstant.GET_METHOD_THIS : PermissionConstant.GET_METHOD_SUB) + methodType;
  143. String selectMethod = (thisFlag ? PermissionConstant.GET_METHOD_THIS : PermissionConstant.GET_METHOD_SUB) + PermissionConstant.GET_METHOD_SELECT;
  144. if ((int)OrganizeAdministratorEntity.class.getMethod(method).invoke(adminEntity) == 1 && (int)OrganizeAdministratorEntity.class.getMethod(selectMethod).invoke(adminEntity) == 1) {
  145. return true;
  146. }
  147. } catch (Exception e) {
  148. e.printStackTrace();
  149. }
  150. }
  151. return false;
  152. }
  153. }