PermissionUserAspect.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package jnpf.aop;
  2. import jnpf.constant.PermissionConst;
  3. import jnpf.constant.PermissionConstant;
  4. import jnpf.permission.entity.UserRelationEntity;
  5. import jnpf.permission.model.user.form.UserCrForm;
  6. import jnpf.permission.model.userrelation.UserRelationForm;
  7. import jnpf.permission.service.PositionService;
  8. import jnpf.permission.service.UserRelationService;
  9. import jnpf.util.PermissionAspectUtil;
  10. import jnpf.util.UserProvider;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.aspectj.lang.ProceedingJoinPoint;
  13. import org.aspectj.lang.annotation.Around;
  14. import org.aspectj.lang.annotation.Aspect;
  15. import org.aspectj.lang.annotation.Pointcut;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Component;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.StringJoiner;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @author JNPF开发平台组
  24. * @version V3.1.0
  25. * @copyright 引迈信息技术有限公司
  26. * @date 2021/3/15 17:12
  27. */
  28. @Slf4j
  29. @Aspect
  30. @Component
  31. public class PermissionUserAspect implements PermissionAdminBase {
  32. @Autowired
  33. private PositionService positionService;
  34. @Autowired
  35. private UserRelationService userRelationService;
  36. /**
  37. * 分级管理切点
  38. */
  39. @Pointcut("within(jnpf.*.controller.*) && @annotation(jnpf.annotation.UserPermission)")
  40. public void pointcut() {
  41. }
  42. /**
  43. * 分级管理切点
  44. *
  45. * @param pjp
  46. * @return
  47. * @throws Throwable
  48. */
  49. @Around("pointcut()")
  50. public Object around(ProceedingJoinPoint pjp) throws Throwable {
  51. return PermissionAdminBase.permissionCommon(pjp, this);
  52. }
  53. @Override
  54. public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName) {
  55. switch (methodName) {
  56. case PermissionConstant.METHOD_CREATE:
  57. UserCrForm userCrForm = (UserCrForm) pjp.getArgs()[0];
  58. return PermissionAspectUtil.getPermitByOrgId(null,
  59. operatorUserId,
  60. PermissionConstant.METHOD_CREATE);
  61. case PermissionConstant.METHOD_UPDATE:
  62. // 得到修改的用户以前的信息
  63. String userId = (String) pjp.getArgs()[0];
  64. List<String> collect = userRelationService.getListByUserId(userId, PermissionConst.ORGANIZE).stream().map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  65. StringJoiner stringJoiner = new StringJoiner(",");
  66. collect.forEach(t -> {
  67. stringJoiner.add(t);
  68. });
  69. if (PermissionAspectUtil.getPermitByOrgId(
  70. // 操作目标对象组织ID集合
  71. stringJoiner.toString(),
  72. operatorUserId,
  73. PermissionConstant.METHOD_UPDATE)) {
  74. return PermissionAspectUtil.getPermitByOrgId(null,
  75. operatorUserId,
  76. PermissionConstant.METHOD_UPDATE);
  77. }
  78. return false;
  79. case PermissionConstant.METHOD_MODIFY_PW:
  80. return PermissionAspectUtil.getPermitByUserId(
  81. // 操作目标对象的ID
  82. String.valueOf(pjp.getArgs()[0]),
  83. operatorUserId,
  84. PermissionConstant.METHOD_UPDATE);
  85. case PermissionConstant.METHOD_DELETE:
  86. return PermissionAspectUtil.getPermitByUserId(
  87. // 操作目标对象的ID
  88. pjp.getArgs()[0].toString(),
  89. operatorUserId,
  90. PermissionConstant.METHOD_DELETE);
  91. case PermissionConstant.METHOD_SAVE:
  92. String objId = pjp.getArgs()[0].toString();
  93. UserRelationForm userRelationForm = (UserRelationForm) pjp.getArgs()[1];
  94. List<String> orgIds = new ArrayList<>();
  95. if (userRelationForm.getObjectType().equals(PermissionConst.ROLE)) {
  96. // 角色目前修改为只有超管才能够修改
  97. if (UserProvider.getUser().getIsAdministrator()) {
  98. return true;
  99. }
  100. return PermissionAspectUtil.getPermitByOrgId(
  101. // 操作目标对象组织ID集合
  102. String.join(",", orgIds),
  103. operatorUserId,
  104. PermissionConstant.METHOD_UPDATE);
  105. } else {
  106. if (userRelationForm.getObjectType().equals(PermissionConst.GROUP)) {
  107. return true;
  108. }
  109. if (userRelationForm.getObjectType().equals(PermissionConst.POSITION)) {
  110. orgIds.add(positionService.getInfo(objId).getOrganizeId());
  111. }
  112. return PermissionAspectUtil.getPermitByOrgId(
  113. String.join(",", orgIds),
  114. operatorUserId,
  115. PermissionConstant.METHOD_UPDATE);
  116. }
  117. case PermissionConstant.METHOD_DELETE_SOCIALS:
  118. if (pjp.getArgs()[0].toString().equals(operatorUserId)) {
  119. return true;
  120. }
  121. return PermissionAspectUtil.getPermitByUserId(
  122. // 操作目标对象的ID
  123. pjp.getArgs()[0].toString(),
  124. operatorUserId,
  125. PermissionConstant.METHOD_UPDATE);
  126. default:
  127. return false;
  128. }
  129. }
  130. }