Commit e5377074d5c51fd0f2242b6ad234f12b1085d372
1 parent
69503689
数据权限:完善 code review 提到的问题
Showing
7 changed files
with
23 additions
and
36 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
| @@ -50,7 +50,7 @@ public class CrmPermissionAspect { | @@ -50,7 +50,7 @@ public class CrmPermissionAspect { | ||
| 50 | Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别 | 50 | Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别 |
| 51 | 51 | ||
| 52 | // 1.1 如果是超级管理员则直接通过 | 52 | // 1.1 如果是超级管理员则直接通过 |
| 53 | - if (CrmPermissionUtils.validateAdminUser()) { | 53 | + if (CrmPermissionUtils.isCrmAdmin()) { |
| 54 | return; | 54 | return; |
| 55 | } | 55 | } |
| 56 | // 1.2 获取数据权限 | 56 | // 1.2 获取数据权限 |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java
| 1 | package cn.iocoder.yudao.module.crm.framework.permission.core.util; | 1 | package cn.iocoder.yudao.module.crm.framework.permission.core.util; |
| 2 | 2 | ||
| 3 | import cn.hutool.extra.spring.SpringUtil; | 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; | 4 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; |
| 6 | import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | 5 | import cn.iocoder.yudao.module.system.api.permission.PermissionApi; |
| 7 | 6 | ||
| 7 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||
| 8 | + | ||
| 8 | /** | 9 | /** |
| 9 | * 数据权限工具类 | 10 | * 数据权限工具类 |
| 10 | * | 11 | * |
| @@ -12,24 +13,14 @@ import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | @@ -12,24 +13,14 @@ import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | ||
| 12 | */ | 13 | */ |
| 13 | public class CrmPermissionUtils { | 14 | public class CrmPermissionUtils { |
| 14 | 15 | ||
| 15 | - // TODO @puhui999:isCrmAdmin。换成这个名字;因为 validate 一般是参数校验,不符合抛出异常;一般是 isXXXValid 才会返回 true false | 16 | + |
| 16 | /** | 17 | /** |
| 17 | * 校验用户是否是 CRM 管理员 | 18 | * 校验用户是否是 CRM 管理员 |
| 18 | * | 19 | * |
| 19 | * @return 是/否 | 20 | * @return 是/否 |
| 20 | */ | 21 | */ |
| 21 | - public static boolean validateAdminUser() { | ||
| 22 | - return SingletonManager.getPermissionApi().hasAnyRoles(getUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | ||
| 23 | - } | ||
| 24 | - | ||
| 25 | - // TODO @puhui999:这个不需要哈,直接用原本的 SecuriyUtils 去拿更方便一些; | ||
| 26 | - /** | ||
| 27 | - * 获得用户编号 | ||
| 28 | - * | ||
| 29 | - * @return 用户编号 | ||
| 30 | - */ | ||
| 31 | - private static Long getUserId() { | ||
| 32 | - return WebFrameworkUtils.getLoginUserId(); | 22 | + public static boolean isCrmAdmin() { |
| 23 | + return SingletonManager.getPermissionApi().hasAnyRoles(getLoginUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | ||
| 33 | } | 24 | } |
| 34 | 25 | ||
| 35 | /** | 26 | /** |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
| @@ -67,7 +67,6 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { | @@ -67,7 +67,6 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { | ||
| 67 | return customer.getId(); | 67 | return customer.getId(); |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | - // TODO @puhui999:测试下,能不能打出用户数据的变更。啊哈,可以打完微信发我下; | ||
| 71 | @Override | 70 | @Override |
| 72 | @Transactional(rollbackFor = Exception.class) | 71 | @Transactional(rollbackFor = Exception.class) |
| 73 | @LogRecord(type = CRM_CUSTOMER, subType = "更新客户", bizNo = "{{#updateReqVO.id}}", success = "更新了客户{_DIFF{#updateReqVO}}", extra = "{{#extra}}") | 72 | @LogRecord(type = CRM_CUSTOMER, subType = "更新客户", bizNo = "{{#updateReqVO.id}}", success = "更新了客户{_DIFF{#updateReqVO}}", extra = "{{#extra}}") |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
| @@ -90,8 +90,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { | @@ -90,8 +90,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { | ||
| 90 | CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId( | 90 | CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId( |
| 91 | transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId()); | 91 | transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId()); |
| 92 | String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType()); | 92 | String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType()); |
| 93 | - // TODO @puhui999:是不是并且? 不是拥有者,并且不是超管 | ||
| 94 | - if (oldPermission == null || !isOwner(oldPermission.getLevel()) || !CrmPermissionUtils.validateAdminUser()) { | 93 | + if (oldPermission == null || (!isOwner(oldPermission.getLevel()) && !CrmPermissionUtils.isCrmAdmin())) { // 不是拥有者,并且不是超管 |
| 95 | throw exception(CRM_PERMISSION_DENIED, bizTypeName); | 94 | throw exception(CRM_PERMISSION_DENIED, bizTypeName); |
| 96 | } | 95 | } |
| 97 | // 1.1 校验转移对象是否已经是该负责人 | 96 | // 1.1 校验转移对象是否已经是该负责人 |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmQueryWrapperUtils.java
| @@ -40,7 +40,7 @@ public class CrmQueryWrapperUtils { | @@ -40,7 +40,7 @@ public class CrmQueryWrapperUtils { | ||
| 40 | Long userId, Integer sceneType, Boolean pool) { | 40 | Long userId, Integer sceneType, Boolean pool) { |
| 41 | final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id"; | 41 | final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id"; |
| 42 | // 1. 构建数据权限连表条件 | 42 | // 1. 构建数据权限连表条件 |
| 43 | - if (ObjUtil.notEqual(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 | 43 | + if (ObjUtil.notEqual(CrmPermissionUtils.isCrmAdmin(), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 |
| 44 | query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType) | 44 | query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType) |
| 45 | .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对 | 45 | .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对 |
| 46 | .eq(CrmPermissionDO::getUserId, userId)); | 46 | .eq(CrmPermissionDO::getUserId, userId)); |
| @@ -81,7 +81,7 @@ public class CrmQueryWrapperUtils { | @@ -81,7 +81,7 @@ public class CrmQueryWrapperUtils { | ||
| 81 | * @param userId 用户编号 | 81 | * @param userId 用户编号 |
| 82 | */ | 82 | */ |
| 83 | public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) { | 83 | public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) { |
| 84 | - if (ObjUtil.equal(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE)) {// 管理员不需要数据权限 | 84 | + if (ObjUtil.equal(CrmPermissionUtils.isCrmAdmin(), Boolean.TRUE)) {// 管理员不需要数据权限 |
| 85 | return; | 85 | return; |
| 86 | } | 86 | } |
| 87 | 87 |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.java
| @@ -98,11 +98,9 @@ public class AppActivityController { | @@ -98,11 +98,9 @@ public class AppActivityController { | ||
| 98 | return; | 98 | return; |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | - // TODO @puhui999:AppActivityRespVO 搞个构造方法,写起来更方便一些;这样后续万一加个属性,也可以处理下哈; | ||
| 102 | combinationActivities.forEach(item -> { | 101 | combinationActivities.forEach(item -> { |
| 103 | - activityList.add(new AppActivityRespVO().setId(item.getId()) | ||
| 104 | - .setType(PromotionTypeEnum.COMBINATION_ACTIVITY.getType()).setName(item.getName()) | ||
| 105 | - .setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime())); | 102 | + activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(), |
| 103 | + item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); | ||
| 106 | }); | 104 | }); |
| 107 | } | 105 | } |
| 108 | 106 | ||
| @@ -114,9 +112,8 @@ public class AppActivityController { | @@ -114,9 +112,8 @@ public class AppActivityController { | ||
| 114 | } | 112 | } |
| 115 | 113 | ||
| 116 | seckillActivities.forEach(item -> { | 114 | seckillActivities.forEach(item -> { |
| 117 | - activityList.add(new AppActivityRespVO().setId(item.getId()) | ||
| 118 | - .setType(PromotionTypeEnum.SECKILL_ACTIVITY.getType()).setName(item.getName()) | ||
| 119 | - .setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime())); | 115 | + activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(), |
| 116 | + item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); | ||
| 120 | }); | 117 | }); |
| 121 | } | 118 | } |
| 122 | 119 | ||
| @@ -128,9 +125,8 @@ public class AppActivityController { | @@ -128,9 +125,8 @@ public class AppActivityController { | ||
| 128 | } | 125 | } |
| 129 | 126 | ||
| 130 | bargainActivities.forEach(item -> { | 127 | bargainActivities.forEach(item -> { |
| 131 | - activityList.add(new AppActivityRespVO().setId(item.getId()) | ||
| 132 | - .setType(PromotionTypeEnum.BARGAIN_ACTIVITY.getType()).setName(item.getName()) | ||
| 133 | - .setSpuId(item.getSpuId()).setStartTime(item.getStartTime()).setEndTime(item.getEndTime())); | 128 | + activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(), |
| 129 | + item.getName(), item.getSpuId(), item.getStartTime(), item.getEndTime())); | ||
| 134 | }); | 130 | }); |
| 135 | } | 131 | } |
| 136 | 132 | ||
| @@ -144,9 +140,8 @@ public class AppActivityController { | @@ -144,9 +140,8 @@ public class AppActivityController { | ||
| 144 | List<DiscountProductDO> products = discountActivityService.getDiscountProductsByActivityId( | 140 | List<DiscountProductDO> products = discountActivityService.getDiscountProductsByActivityId( |
| 145 | convertSet(discountActivities, DiscountActivityDO::getId)); | 141 | convertSet(discountActivities, DiscountActivityDO::getId)); |
| 146 | Map<Long, Long> productMap = convertMap(products, DiscountProductDO::getActivityId, DiscountProductDO::getSpuId); | 142 | Map<Long, Long> productMap = convertMap(products, DiscountProductDO::getActivityId, DiscountProductDO::getSpuId); |
| 147 | - discountActivities.forEach(item -> activityList.add(new AppActivityRespVO().setId(item.getId()) | ||
| 148 | - .setType(PromotionTypeEnum.DISCOUNT_ACTIVITY.getType()).setName(item.getName()) | ||
| 149 | - .setSpuId(productMap.get(item.getId())).setStartTime(item.getStartTime()).setEndTime(item.getEndTime()))); | 143 | + discountActivities.forEach(item -> activityList.add(new AppActivityRespVO(item.getId(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType(), |
| 144 | + item.getName(), productMap.get(item.getId()), item.getStartTime(), item.getEndTime()))); | ||
| 150 | } | 145 | } |
| 151 | 146 | ||
| 152 | private void getRewardActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) { | 147 | private void getRewardActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) { |
| @@ -168,9 +163,8 @@ public class AppActivityController { | @@ -168,9 +163,8 @@ public class AppActivityController { | ||
| 168 | } | 163 | } |
| 169 | 164 | ||
| 170 | RewardActivityDO rewardActivityDO = spuIdAndActivityMap.get(supId).get(); | 165 | RewardActivityDO rewardActivityDO = spuIdAndActivityMap.get(supId).get(); |
| 171 | - activityList.add(new AppActivityRespVO().setId(rewardActivityDO.getId()) | ||
| 172 | - .setType(PromotionTypeEnum.REWARD_ACTIVITY.getType()).setName(rewardActivityDO.getName()) | ||
| 173 | - .setSpuId(supId).setStartTime(rewardActivityDO.getStartTime()).setEndTime(rewardActivityDO.getEndTime())); | 166 | + activityList.add(new AppActivityRespVO(rewardActivityDO.getId(), PromotionTypeEnum.REWARD_ACTIVITY.getType(), |
| 167 | + rewardActivityDO.getName(), supId, rewardActivityDO.getStartTime(), rewardActivityDO.getEndTime())); | ||
| 174 | } | 168 | } |
| 175 | } | 169 | } |
| 176 | 170 |
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/vo/AppActivityRespVO.java
| 1 | package cn.iocoder.yudao.module.promotion.controller.app.activity.vo; | 1 | package cn.iocoder.yudao.module.promotion.controller.app.activity.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | +import lombok.AllArgsConstructor; | ||
| 4 | import lombok.Data; | 5 | import lombok.Data; |
| 6 | +import lombok.NoArgsConstructor; | ||
| 5 | 7 | ||
| 6 | import java.time.LocalDateTime; | 8 | import java.time.LocalDateTime; |
| 7 | 9 | ||
| 8 | @Schema(description = "用户 App - 营销活动 Response VO") | 10 | @Schema(description = "用户 App - 营销活动 Response VO") |
| 11 | +@AllArgsConstructor | ||
| 12 | +@NoArgsConstructor | ||
| 9 | @Data | 13 | @Data |
| 10 | public class AppActivityRespVO { | 14 | public class AppActivityRespVO { |
| 11 | 15 |