Commit e5377074d5c51fd0f2242b6ad234f12b1085d372

Authored by puhui999
1 parent 69503689

数据权限:完善 code review 提到的问题

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