Commit 55a215da44481a9116bdae824d018dda45afaacd
1 parent
3e91ac73
CRM-数据权限:完善数据权限补全管理员和公海相关情况处理逻辑
Showing
14 changed files
with
66 additions
and
30 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java
| ... | ... | @@ -8,8 +8,8 @@ import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionR |
| 8 | 8 | import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionUpdateReqVO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.convert.permission.CrmPermissionConvert; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 11 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 12 | 11 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 13 | 13 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 14 | 14 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| 15 | 15 | import cn.iocoder.yudao.module.system.api.dept.PostApi; |
| ... | ... | @@ -21,12 +21,12 @@ import io.swagger.v3.oas.annotations.Operation; |
| 21 | 21 | import io.swagger.v3.oas.annotations.Parameter; |
| 22 | 22 | import io.swagger.v3.oas.annotations.Parameters; |
| 23 | 23 | import io.swagger.v3.oas.annotations.tags.Tag; |
| 24 | +import jakarta.annotation.Resource; | |
| 25 | +import jakarta.validation.Valid; | |
| 24 | 26 | import org.springframework.security.access.prepost.PreAuthorize; |
| 25 | 27 | import org.springframework.validation.annotation.Validated; |
| 26 | 28 | import org.springframework.web.bind.annotation.*; |
| 27 | 29 | |
| 28 | -import jakarta.annotation.Resource; | |
| 29 | -import jakarta.validation.Valid; | |
| 30 | 30 | import java.util.*; |
| 31 | 31 | |
| 32 | 32 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/package-info.java deleted
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/annotations/CrmPermission.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/annotations/CrmPermission.java
| 1 | -package cn.iocoder.yudao.module.crm.framework.core.annotations; | |
| 1 | +package cn.iocoder.yudao.module.crm.framework.permission.core.annotations; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 4 | 4 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/aop/CrmPermissionAspect.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
| 1 | -package cn.iocoder.yudao.module.crm.framework.core.aop; | |
| 1 | +package cn.iocoder.yudao.module.crm.framework.permission.core.aop; | |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.ObjUtil; |
| 5 | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | +import cn.hutool.extra.spring.SpringUtil; | |
| 6 | 7 | import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; |
| 7 | 8 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| 8 | 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 9 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | +import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | |
| 13 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 12 | 14 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 15 | +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 16 | +import jakarta.annotation.Resource; | |
| 13 | 17 | import lombok.extern.slf4j.Slf4j; |
| 14 | 18 | import org.aspectj.lang.JoinPoint; |
| 15 | 19 | import org.aspectj.lang.annotation.Aspect; |
| 16 | 20 | import org.aspectj.lang.annotation.Before; |
| 17 | 21 | import org.springframework.stereotype.Component; |
| 18 | 22 | |
| 19 | -import jakarta.annotation.Resource; | |
| 20 | 23 | import java.util.ArrayList; |
| 21 | 24 | import java.util.List; |
| 22 | 25 | import java.util.Map; |
| 23 | 26 | |
| 24 | 27 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 28 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; | |
| 25 | 29 | import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; |
| 26 | 30 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CRM_PERMISSION_DENIED; |
| 27 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CRM_PERMISSION_MODEL_NOT_EXISTS; | |
| 28 | 31 | |
| 29 | -// TODO 这个包,改成 permission,然后搞 config 和 core 包,这个类在 core 包里;目的是:framework 最好分类下 | |
| 30 | 32 | /** |
| 31 | 33 | * Crm 数据权限校验 AOP 切面 |
| 32 | 34 | * |
| ... | ... | @@ -42,10 +44,6 @@ public class CrmPermissionAspect { |
| 42 | 44 | |
| 43 | 45 | @Before("@annotation(crmPermission)") |
| 44 | 46 | public void doBefore(JoinPoint joinPoint, CrmPermission crmPermission) { |
| 45 | - // TODO 芋艿:临时,方便大家调试 | |
| 46 | - //if (true) { | |
| 47 | - // return; | |
| 48 | - //} | |
| 49 | 47 | // 获取相关属性值 |
| 50 | 48 | Map<String, Object> expressionValues = parseExpressions(joinPoint, crmPermission); |
| 51 | 49 | Integer bizType = StrUtil.isEmpty(crmPermission.bizTypeValue()) ? |
| ... | ... | @@ -53,16 +51,28 @@ public class CrmPermissionAspect { |
| 53 | 51 | Long bizId = (Long) expressionValues.get(crmPermission.bizId()); // 模块数据编号 |
| 54 | 52 | Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别 |
| 55 | 53 | |
| 56 | - // TODO 如果是超级管理员则直接通过 | |
| 57 | - //if (superAdmin){ | |
| 58 | - // return; | |
| 59 | - //} | |
| 60 | - | |
| 61 | - // 1. 获取数据权限 | |
| 54 | + // 1.1 如果是超级管理员则直接通过 | |
| 55 | + if (validateAdminUser(getUserId())) { | |
| 56 | + return; | |
| 57 | + } | |
| 58 | + // 1.2 获取数据权限 | |
| 62 | 59 | List<CrmPermissionDO> bizPermissions = crmPermissionService.getPermissionListByBiz(bizType, bizId); |
| 63 | - if (CollUtil.isEmpty(bizPermissions)) { // 数据权限不存存那么数据也不存在 | |
| 64 | - throw exception(CRM_PERMISSION_MODEL_NOT_EXISTS, CrmBizTypeEnum.getNameByType(bizType)); | |
| 60 | + if (CollUtil.isEmpty(bizPermissions)) { // 没有数据权限的情况 | |
| 61 | + // 公海数据如果没有团队成员大家也因该有读权限才对 | |
| 62 | + if (CrmPermissionLevelEnum.isRead(permissionLevel)) { | |
| 63 | + return; | |
| 64 | + } | |
| 65 | + | |
| 66 | + // 没有数据权限的情况下超出了读权限直接报错,避免后面校验空指针 | |
| 67 | + throw exception(CRM_PERMISSION_DENIED, CrmBizTypeEnum.getNameByType(bizType)); | |
| 68 | + } else { // 有数据权限但是没有负责人的情况 | |
| 69 | + if (!anyMatch(bizPermissions, item -> CrmPermissionLevelEnum.isOwner(item.getLevel()))) { | |
| 70 | + if (CrmPermissionLevelEnum.isRead(permissionLevel)) { | |
| 71 | + return; | |
| 72 | + } | |
| 73 | + } | |
| 65 | 74 | } |
| 75 | + | |
| 66 | 76 | // 2.1 情况一:如果自己是负责人,则默认有所有权限 |
| 67 | 77 | CrmPermissionDO userPermission = CollUtil.findOne(bizPermissions, permission -> ObjUtil.equal(permission.getUserId(), getUserId())); |
| 68 | 78 | if (userPermission != null) { |
| ... | ... | @@ -110,4 +120,29 @@ public class CrmPermissionAspect { |
| 110 | 120 | return SpringExpressionUtils.parseExpressions(joinPoint, expressionStrings); |
| 111 | 121 | } |
| 112 | 122 | |
| 123 | + /** | |
| 124 | + * 校验用户是否是 CRM 管理员 | |
| 125 | + * | |
| 126 | + * @param userId 用户编号 | |
| 127 | + * @return 是/否 | |
| 128 | + */ | |
| 129 | + private static boolean validateAdminUser(Long userId) { | |
| 130 | + return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | |
| 131 | + } | |
| 132 | + | |
| 133 | + /** | |
| 134 | + * 静态内部类实现单例获取 | |
| 135 | + * | |
| 136 | + * @author HUIHUI | |
| 137 | + */ | |
| 138 | + private static class SingletonManager { | |
| 139 | + | |
| 140 | + private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | |
| 141 | + | |
| 142 | + public static PermissionApi getPermissionApi() { | |
| 143 | + return PERMISSION_API; | |
| 144 | + } | |
| 145 | + | |
| 146 | + } | |
| 147 | + | |
| 113 | 148 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/package-info.java
0 → 100644
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/package-info.java
0 → 100644
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 15 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 16 | 16 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 17 | 17 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 18 | 18 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImpl.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.dal.mysql.clue.CrmClueMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 15 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 16 | 16 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 17 | 17 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 18 | 18 | import jakarta.annotation.Resource; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
| ... | ... | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 12 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 13 | 13 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 15 | 15 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contactbusinesslink/CrmContactBusinessLinkServiceImpl.java
| ... | ... | @@ -14,7 +14,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContact |
| 14 | 14 | import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper; |
| 15 | 15 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 16 | 16 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 17 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 17 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 18 | 18 | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; |
| 19 | 19 | import jakarta.annotation.Resource; |
| 20 | 20 | import org.springframework.stereotype.Service; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 15 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 16 | 16 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 17 | 17 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 18 | 18 | import jakarta.annotation.Resource; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.dal.mysql.customer.CrmCustomerMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 15 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 16 | 16 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 17 | 17 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 18 | 18 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
| ... | ... | @@ -15,7 +15,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO |
| 15 | 15 | import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper; |
| 16 | 16 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 17 | 17 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 18 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 18 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 19 | 19 | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| 20 | 20 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 21 | 21 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
| ... | ... | @@ -18,7 +18,7 @@ import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper; |
| 18 | 18 | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| 19 | 19 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 20 | 20 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 21 | -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | |
| 21 | +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; | |
| 22 | 22 | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| 23 | 23 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 24 | 24 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | ... | ... |