From 7f569f32998b7a8f036c8ede96389ff18de8b0e2 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Mon, 27 Nov 2023 10:55:32 +0800 Subject: [PATCH] =?UTF-8?q?crm-=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=EF=BC=9A=E5=AE=8C=E5=96=84=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permission/CrmPermissionController.java | 51 ++------------- .../permission/CrmPermissionConvert.java | 2 + .../permission/CrmPermissionService.java | 34 +++++----- .../permission/CrmPermissionServiceImpl.java | 64 +++++++++++++------ .../module/crm/util/CrmPermissionUtils.java | 27 -------- 5 files changed, 67 insertions(+), 111 deletions(-) delete mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java index 34a912a2e..2d593c7ce 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.crm.controller.admin.permission; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionCreateReqVO; @@ -30,11 +29,9 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.util.*; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; @Tag(name = "管理后台 - CRM 数据权限") @RestController @@ -71,59 +68,21 @@ public class CrmPermissionController { return success(true); } - // TODO @puhui999:这个要不要放到 Service 实现,让 Controller 还轻一点; @DeleteMapping("/delete") @Operation(summary = "删除数据权限") @Parameter(name = "ids", description = "数据权限编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('crm:permission:delete')") public CommonResult deletePermission(@RequestParam("ids") Collection ids) { - List permissions = permissionService.getPermissionList(ids); - if (CollUtil.isEmpty(permissions)) { - throw exception(CRM_PERMISSION_NOT_EXISTS); - } - Set bizIds = convertSet(permissions, CrmPermissionDO::getBizId); - if (bizIds.size() > 1) { // 情况一:数据权限的模块数据编号是一致的不可能存在两个 TODO @puhui999:这里可以额外说明下原因,就是批量删除权限的时候,只能属于同一个 bizId 下; - throw exception(CRM_PERMISSION_DELETE_FAIL); - } - // TODO @puhui999:下面 2 个,可以忽略。简单点哈; - if (permissions.size() != ids.size()) { // 情况二:期望数量和实际结果不一致 - throw exception(CRM_PERMISSION_NOT_EXISTS); - } - // 情况三:不能包含负责人 - // TODO @puhui999:isOwner 可以直接放到判断里,不用单独取个变量名 - boolean isOwner = CollectionUtils.anyMatch(permissions, item -> ObjUtil.equal(item.getLevel(), CrmPermissionLevelEnum.OWNER.getLevel())); - if (isOwner) { - throw exception(CRM_PERMISSION_DELETE_FAIL_EXIST_OWNER); - } - // 校验操作人是否为负责人 - CrmPermissionDO permission = permissionService.getPermission(permissions.get(0).getBizId(), getLoginUserId()); - if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) { - throw exception(CRM_PERMISSION_DELETE_DENIED); - } - // 删除数据权限 - permissionService.deletePermission(ids); + permissionService.deletePermissionBatch(ids, getLoginUserId()); return success(true); } - // TODO @puhui999:这个要不要放到 Service 实现,让 Controller 还轻一点; - // TODO @puhui999:delete-self 就可以啦。方法名叫 deleteSelfPermission - @DeleteMapping("/deleteSelfPermission") + @DeleteMapping("/delete-self") @Operation(summary = "删除自己的数据权限") @Parameter(name = "id", description = "数据权限编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('crm:permission:delete')") - public CommonResult deletePermission(@RequestParam("id") Long id) { - // 校验数据存在且是自己 - CrmPermissionDO permission = permissionService.getPermission(id, getLoginUserId()); - if (permission == null) { - throw exception(CRM_PERMISSION_NOT_EXISTS); - } - // 校验是否是负责人 - if (CrmPermissionLevelEnum.isOwner(permission.getLevel())) { - throw exception(CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER); - } - - // 删除 - permissionService.deletePermission(Collections.singletonList(id)); + @PreAuthorize("@ss.hasPermission('crm:permission:delete')") // TODO puhui999: 数据权限在页面上只是已团队成员组件的形式出现,那么这个权限怎么分配? + public CommonResult deleteSelfPermission(@RequestParam("id") Long id) { + permissionService.deleteSelfPermission(id, getLoginUserId()); return success(true); } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java index 03492b2c0..cab0c76b3 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java @@ -61,4 +61,6 @@ public interface CrmPermissionConvert { id -> new CrmPermissionDO().setId(id).setLevel(updateReqVO.getLevel())); } + List convertList(List createBOs); + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionService.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionService.java index 3067bf7c2..b7df1f4a0 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionService.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionService.java @@ -27,6 +27,13 @@ public interface CrmPermissionService { */ Long createPermission(@Valid CrmPermissionCreateReqBO createBO); + /** + * 创建数据权限 + * + * @param createBOs 创建信息 + */ + void createPermissionBatch(@Valid List createBOs); + /** * 更新数据权限 * @@ -41,13 +48,6 @@ public interface CrmPermissionService { */ void transferPermission(@Valid CrmPermissionTransferReqBO crmPermissionTransferReqBO); - /** - * 删除数据权限 - * - * @param ids 编号 - */ - void deletePermission(Collection ids); - /** * 删除数据权限 * @@ -58,13 +58,19 @@ public interface CrmPermissionService { void deletePermission(Integer bizType, Long bizId, Integer level); /** - * 获取用户数据权限通过 权限编号 x 用户编号 + * 批量删除数据权限 + * + * @param ids 权限编号 + */ + void deletePermissionBatch(Collection ids, Long userId); + + /** + * 删除指定用户数据权限 * * @param id 权限编号 * @param userId 用户编号 - * @return 数据权限 */ - CrmPermissionDO getPermission(Long id, Long userId); + void deleteSelfPermission(Long id, Long userId); /** * 获取数据权限列表,通过 数据类型 x 某个数据 @@ -75,14 +81,6 @@ public interface CrmPermissionService { */ List getPermissionListByBiz(Integer bizType, Long bizId); - /** - * 获得数据权限列表 - * - * @param ids 数据权限编号列表 - * @return 数据权限列表 - */ - List getPermissionList(Collection ids); - /** * 获取用户参与的模块数据列表 * diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java index 935b6f0e0..dc584fce7 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java @@ -19,6 +19,7 @@ import javax.annotation.Resource; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @@ -52,6 +53,16 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { return permission.getId(); } + @Override + public void createPermissionBatch(List createBOs) { + // 1. 校验用户是否存在 + adminUserApi.validateUserList(convertSet(createBOs, CrmPermissionCreateReqBO::getUserId)); + + // 2. 创建 + List permissions = CrmPermissionConvert.INSTANCE.convertList(createBOs); + crmPermissionMapper.insertBatch(permissions); + } + @Override @Transactional(rollbackFor = Exception.class) public void updatePermission(CrmPermissionUpdateReqVO updateReqVO) { @@ -110,16 +121,6 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { } } - @Override - @Transactional(rollbackFor = Exception.class) - public void deletePermission(Collection ids) { - // 校验存在 - validateCrmPermissionExists(ids); - - // 删除 - crmPermissionMapper.deleteBatchIds(ids); - } - @Override @Transactional(rollbackFor = Exception.class) public void deletePermission(Integer bizType, Long bizId, Integer level) { @@ -135,8 +136,39 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { } @Override - public CrmPermissionDO getPermission(Long id, Long userId) { - return crmPermissionMapper.selectByIdAndUserId(id, userId); + public void deletePermissionBatch(Collection ids, Long userId) { + List permissions = crmPermissionMapper.selectBatchIds(ids); + if (CollUtil.isEmpty(permissions)) { + throw exception(CRM_PERMISSION_NOT_EXISTS); + } + Set bizIds = convertSet(permissions, CrmPermissionDO::getBizId); + if (bizIds.size() > 1) { // 情况一:数据权限的模块数据编号是一致的不可能存在两个 + throw exception(CRM_PERMISSION_DELETE_FAIL); + } + // 校验操作人是否为负责人 + CrmPermissionDO permission = crmPermissionMapper.selectByIdAndUserId(permissions.get(0).getBizId(), userId); + if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) { + throw exception(CRM_PERMISSION_DELETE_DENIED); + } + + // 删除数据权限 + crmPermissionMapper.deleteBatchIds(ids); + } + + @Override + public void deleteSelfPermission(Long id, Long userId) { + // 校验数据存在且是自己 + CrmPermissionDO permission = crmPermissionMapper.selectByIdAndUserId(id, userId); + if (permission == null) { + throw exception(CRM_PERMISSION_NOT_EXISTS); + } + // 校验是否是负责人 + if (CrmPermissionLevelEnum.isOwner(permission.getLevel())) { + throw exception(CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER); + } + + // 删除 + crmPermissionMapper.deleteById(id); } @Override @@ -144,14 +176,6 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { return crmPermissionMapper.selectByBizTypeAndBizId(bizType, bizId); } - @Override - public List getPermissionList(Collection ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return crmPermissionMapper.selectBatchIds(ids); - } - @Override public List getPermissionListByBizTypeAndUserId(Integer bizType, Long userId) { return crmPermissionMapper.selectListByBizTypeAndUserId(bizType, userId); diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java deleted file mode 100644 index 7c15b5f1f..000000000 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.crm.util; - -import cn.hutool.core.util.StrUtil; -import com.github.yulichang.wrapper.MPJLambdaWrapper; - -// TODO @puhui999:这个类还要哇? -/** - * 数据权限工具类 - * - * @author HUIHUI - */ -public class CrmPermissionUtils { - - /** - * 构建用户可查看数据连表条件 - * - * @param mpjLambdaWrapper 多表查询 wrapper - * @param bizTyp 模块类型 - * @param userId 用户 - */ - public static void builderRightJoinQuery(MPJLambdaWrapper mpjLambdaWrapper, Integer bizTyp, Long userId) { - String querySql = "(SELECT t1.biz_id FROM crm_permission t1 WHERE (t1.biz_type = {} AND t1.user_id = {})) t2 on t.id = t2.biz_id"; - // 默认主表别名是 t - mpjLambdaWrapper.rightJoin(StrUtil.format(querySql, bizTyp, userId)); - } - -}