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 50 Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别
51 51  
52 52 // 1.1 如果是超级管理员则直接通过
53   - if (CrmPermissionUtils.validateAdminUser()) {
  53 + if (CrmPermissionUtils.isCrmAdmin()) {
54 54 return;
55 55 }
56 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 1 package cn.iocoder.yudao.module.crm.framework.permission.core.util;
2 2  
3 3 import cn.hutool.extra.spring.SpringUtil;
4   -import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
5 4 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
6 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 13 */
13 14 public class CrmPermissionUtils {
14 15  
15   - // TODO @puhui999:isCrmAdmin。换成这个名字;因为 validate 一般是参数校验,不符合抛出异常;一般是 isXXXValid 才会返回 true false
  16 +
16 17 /**
17 18 * 校验用户是否是 CRM 管理员
18 19 *
19 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 67 return customer.getId();
68 68 }
69 69  
70   - // TODO @puhui999:测试下,能不能打出用户数据的变更。啊哈,可以打完微信发我下;
71 70 @Override
72 71 @Transactional(rollbackFor = Exception.class)
73 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 90 CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId(
91 91 transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
92 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 94 throw exception(CRM_PERMISSION_DENIED, bizTypeName);
96 95 }
97 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 40 Long userId, Integer sceneType, Boolean pool) {
41 41 final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id";
42 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 44 query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
45 45 .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对
46 46 .eq(CrmPermissionDO::getUserId, userId));
... ... @@ -81,7 +81,7 @@ public class CrmQueryWrapperUtils {
81 81 * @param userId 用户编号
82 82 */
83 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 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 98 return;
99 99 }
100 100  
101   - // TODO @puhui999:AppActivityRespVO 搞个构造方法,写起来更方便一些;这样后续万一加个属性,也可以处理下哈;
102 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 112 }
115 113  
116 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 125 }
129 126  
130 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 140 List<DiscountProductDO> products = discountActivityService.getDiscountProductsByActivityId(
145 141 convertSet(discountActivities, DiscountActivityDO::getId));
146 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 147 private void getRewardActivities(Collection<Long> spuIds, LocalDateTime now, List<AppActivityRespVO> activityList) {
... ... @@ -168,9 +163,8 @@ public class AppActivityController {
168 163 }
169 164  
170 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 1 package cn.iocoder.yudao.module.promotion.controller.app.activity.vo;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.AllArgsConstructor;
4 5 import lombok.Data;
  6 +import lombok.NoArgsConstructor;
5 7  
6 8 import java.time.LocalDateTime;
7 9  
8 10 @Schema(description = "用户 App - 营销活动 Response VO")
  11 +@AllArgsConstructor
  12 +@NoArgsConstructor
9 13 @Data
10 14 public class AppActivityRespVO {
11 15  
... ...