Commit e8ade5f1fe36f1a7102822b5ed3e7b2444711174
1 parent
a05d3bc1
crm:完善一些遗留的 TODO
Showing
6 changed files
with
68 additions
and
52 deletions
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/aop/OperateLogV2Aspect.java
| ... | ... | @@ -129,6 +129,10 @@ public class OperateLogV2Aspect { |
| 129 | 129 | if (EXTRA.get() != null && EXTRA.get().get(ENABLE) != null) { |
| 130 | 130 | return; |
| 131 | 131 | } |
| 132 | + if (CONTENT.get() == null) { // 没有值说明没有日志需要记录 | |
| 133 | + return; | |
| 134 | + } | |
| 135 | + | |
| 132 | 136 | // 真正记录操作日志 |
| 133 | 137 | this.log0(joinPoint, operation, startTime, result, exception); |
| 134 | 138 | } catch (Throwable ex) { |
| ... | ... | @@ -146,7 +150,7 @@ public class OperateLogV2Aspect { |
| 146 | 150 | // 补充用户信息 |
| 147 | 151 | fillUserFields(reqDTO); |
| 148 | 152 | // 补全模块信息 |
| 149 | - fillModuleFields(reqDTO, joinPoint, operation); | |
| 153 | + fillModuleFields(reqDTO, operation); | |
| 150 | 154 | // 补全请求信息 |
| 151 | 155 | fillRequestFields(reqDTO); |
| 152 | 156 | // 补全方法信息 |
| ... | ... | @@ -161,7 +165,7 @@ public class OperateLogV2Aspect { |
| 161 | 165 | reqDTO.setUserType(WebFrameworkUtils.getLoginUserType()); |
| 162 | 166 | } |
| 163 | 167 | |
| 164 | - private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, ProceedingJoinPoint joinPoint, Operation operation) { | |
| 168 | + private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, Operation operation) { | |
| 165 | 169 | LogRecord logRecord = CONTENT.get(); |
| 166 | 170 | reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号 |
| 167 | 171 | reqDTO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
| ... | ... | @@ -3,16 +3,14 @@ package cn.iocoder.yudao.module.crm.framework.permission.core.aop; |
| 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; | |
| 7 | 6 | import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; |
| 8 | 7 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| 9 | 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 10 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 10 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | -import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | |
| 13 | 11 | import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; |
| 12 | +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 14 | 13 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 15 | -import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 16 | 14 | import jakarta.annotation.Resource; |
| 17 | 15 | import lombok.extern.slf4j.Slf4j; |
| 18 | 16 | import org.aspectj.lang.JoinPoint; |
| ... | ... | @@ -52,7 +50,7 @@ public class CrmPermissionAspect { |
| 52 | 50 | Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别 |
| 53 | 51 | |
| 54 | 52 | // 1.1 如果是超级管理员则直接通过 |
| 55 | - if (validateAdminUser(getUserId())) { | |
| 53 | + if (CrmPermissionUtils.validateAdminUser()) { | |
| 56 | 54 | return; |
| 57 | 55 | } |
| 58 | 56 | // 1.2 获取数据权限 |
| ... | ... | @@ -120,29 +118,4 @@ public class CrmPermissionAspect { |
| 120 | 118 | return SpringExpressionUtils.parseExpressions(joinPoint, expressionStrings); |
| 121 | 119 | } |
| 122 | 120 | |
| 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 | - | |
| 148 | 121 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.crm.framework.permission.core.util; | |
| 2 | + | |
| 3 | +import cn.hutool.extra.spring.SpringUtil; | |
| 4 | +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; | |
| 5 | +import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | |
| 6 | +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * 数据权限工具类 | |
| 10 | + * | |
| 11 | + * @author HUIHUI | |
| 12 | + */ | |
| 13 | +public class CrmPermissionUtils { | |
| 14 | + | |
| 15 | + /** | |
| 16 | + * 校验用户是否是 CRM 管理员 | |
| 17 | + * | |
| 18 | + * @return 是/否 | |
| 19 | + */ | |
| 20 | + public static boolean validateAdminUser() { | |
| 21 | + return SingletonManager.getPermissionApi().hasAnyRoles(getUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | |
| 22 | + } | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 获得用户编号 | |
| 26 | + * | |
| 27 | + * @return 用户编号 | |
| 28 | + */ | |
| 29 | + private static Long getUserId() { | |
| 30 | + return WebFrameworkUtils.getLoginUserId(); | |
| 31 | + } | |
| 32 | + | |
| 33 | + /** | |
| 34 | + * 静态内部类实现单例获取 | |
| 35 | + * | |
| 36 | + * @author HUIHUI | |
| 37 | + */ | |
| 38 | + private static class SingletonManager { | |
| 39 | + | |
| 40 | + private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | |
| 41 | + | |
| 42 | + public static PermissionApi getPermissionApi() { | |
| 43 | + return PERMISSION_API; | |
| 44 | + } | |
| 45 | + | |
| 46 | + } | |
| 47 | + | |
| 48 | +} | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
| ... | ... | @@ -53,6 +53,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 53 | 53 | |
| 54 | 54 | @Override |
| 55 | 55 | @Transactional(rollbackFor = Exception.class) |
| 56 | + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#customerId}}", success = "创建了客户") | |
| 56 | 57 | public Long createCustomer(CrmCustomerCreateReqVO createReqVO, Long userId) { |
| 57 | 58 | // 插入 |
| 58 | 59 | CrmCustomerDO customer = CrmCustomerConvert.INSTANCE.convert(createReqVO); |
| ... | ... | @@ -61,6 +62,9 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 61 | 62 | // 创建数据权限 |
| 62 | 63 | crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType()) |
| 63 | 64 | .setBizId(customer.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人 |
| 65 | + | |
| 66 | + // 添加日志上下文所需 | |
| 67 | + LogRecordContext.putVariable("customerId", customer.getId()); | |
| 64 | 68 | return customer.getId(); |
| 65 | 69 | } |
| 66 | 70 | |
| ... | ... | @@ -85,6 +89,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 85 | 89 | |
| 86 | 90 | @Override |
| 87 | 91 | @Transactional(rollbackFor = Exception.class) |
| 92 | + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "删除了客户") | |
| 88 | 93 | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER) |
| 89 | 94 | public void deleteCustomer(Long id) { |
| 90 | 95 | // 校验存在 |
| ... | ... | @@ -152,6 +157,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 152 | 157 | } |
| 153 | 158 | |
| 154 | 159 | @Override |
| 160 | + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#updateReqVO.id}}", success = "锁定了客户") | |
| 155 | 161 | public void lockCustomer(CrmCustomerUpdateReqVO updateReqVO) { |
| 156 | 162 | // 校验存在 |
| 157 | 163 | validateCustomerExists(updateReqVO.getId()); |
| ... | ... | @@ -165,6 +171,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 165 | 171 | |
| 166 | 172 | @Override |
| 167 | 173 | @Transactional(rollbackFor = Exception.class) |
| 174 | + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "将客户放入了公海") | |
| 168 | 175 | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER) |
| 169 | 176 | public void putCustomerPool(Long id) { |
| 170 | 177 | // 1. 校验存在 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
| ... | ... | @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 11 | +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 11 | 12 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 12 | 13 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; |
| 13 | 14 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| ... | ... | @@ -89,8 +90,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { |
| 89 | 90 | CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId( |
| 90 | 91 | transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId()); |
| 91 | 92 | String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType()); |
| 92 | - // TODO 校验是否为超级管理员 || 1 | |
| 93 | - if (oldPermission == null || !isOwner(oldPermission.getLevel())) { | |
| 93 | + if (oldPermission == null || !isOwner(oldPermission.getLevel()) || !CrmPermissionUtils.validateAdminUser()) { | |
| 94 | 94 | throw exception(CRM_PERMISSION_DENIED, bizTypeName); |
| 95 | 95 | } |
| 96 | 96 | // 1.1 校验转移对象是否已经是该负责人 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmQueryWrapperUtils.java
| ... | ... | @@ -7,8 +7,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 7 | 7 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 10 | -import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | |
| 11 | -import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 10 | +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 12 | 11 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 13 | 12 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 14 | 13 | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| ... | ... | @@ -41,7 +40,7 @@ public class CrmQueryWrapperUtils { |
| 41 | 40 | Long userId, Integer sceneType, Boolean pool) { |
| 42 | 41 | final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id"; |
| 43 | 42 | // 1. 构建数据权限连表条件 |
| 44 | - if (ObjUtil.notEqual(validateAdminUser(userId), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 | |
| 43 | + if (ObjUtil.notEqual(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 | |
| 45 | 44 | query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType) |
| 46 | 45 | .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对 |
| 47 | 46 | .eq(CrmPermissionDO::getUserId, userId)); |
| ... | ... | @@ -82,7 +81,7 @@ public class CrmQueryWrapperUtils { |
| 82 | 81 | * @param userId 用户编号 |
| 83 | 82 | */ |
| 84 | 83 | public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) { |
| 85 | - if (ObjUtil.equal(validateAdminUser(userId), Boolean.TRUE)) {// 管理员不需要数据权限 | |
| 84 | + if (ObjUtil.equal(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE)) {// 管理员不需要数据权限 | |
| 86 | 85 | return; |
| 87 | 86 | } |
| 88 | 87 | |
| ... | ... | @@ -92,16 +91,6 @@ public class CrmQueryWrapperUtils { |
| 92 | 91 | } |
| 93 | 92 | |
| 94 | 93 | /** |
| 95 | - * 校验用户是否是 CRM 管理员 | |
| 96 | - * | |
| 97 | - * @param userId 用户编号 | |
| 98 | - * @return 是/否 | |
| 99 | - */ | |
| 100 | - private static boolean validateAdminUser(Long userId) { | |
| 101 | - return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | |
| 102 | - } | |
| 103 | - | |
| 104 | - /** | |
| 105 | 94 | * 静态内部类实现单例获取 |
| 106 | 95 | * |
| 107 | 96 | * @author HUIHUI |
| ... | ... | @@ -109,17 +98,12 @@ public class CrmQueryWrapperUtils { |
| 109 | 98 | private static class SingletonManager { |
| 110 | 99 | |
| 111 | 100 | private static final AdminUserApi ADMIN_USER_API = SpringUtil.getBean(AdminUserApi.class); |
| 112 | - private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | |
| 113 | 101 | private static final MybatisPlusJoinProperties MYBATIS_PLUS_JOIN_PROPERTIES = SpringUtil.getBean(MybatisPlusJoinProperties.class); |
| 114 | 102 | |
| 115 | 103 | public static AdminUserApi getAdminUserApi() { |
| 116 | 104 | return ADMIN_USER_API; |
| 117 | 105 | } |
| 118 | 106 | |
| 119 | - public static PermissionApi getPermissionApi() { | |
| 120 | - return PERMISSION_API; | |
| 121 | - } | |
| 122 | - | |
| 123 | 107 | public static MybatisPlusJoinProperties getMybatisPlusJoinProperties() { |
| 124 | 108 | return MYBATIS_PLUS_JOIN_PROPERTIES; |
| 125 | 109 | } | ... | ... |