From 5bbf6b97525dd92c81fe91447953e7819f8a4e18 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 17 八月 2026 16:49:46 +0800
Subject: [PATCH] 上级账户可以将下属账户添加的团队成员退出团队
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java | 31 ++++++++++++++++++++++++-------
1 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
index 6e2c37c..18d2cda 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
@@ -272,16 +272,22 @@
if (CollUtil.isEmpty(permissions)) {
throw exception(CRM_PERMISSION_NOT_EXISTS);
}
- // 鏍¢獙锛氭暟鎹潈闄愮殑妯″潡鏁版嵁缂栧彿鏄竴鑷寸殑涓嶅彲鑳藉瓨鍦ㄤ袱涓�
- if (convertSet(permissions, CrmPermissionDO::getBizId).size() > 1) {
+ // 鏍¢獙锛氭暟鎹潈闄愬繀椤诲睘浜庡悓涓�涓笟鍔$被鍨嬨�佸悓涓�鏉′笟鍔℃暟鎹�
+ if (convertSet(permissions, CrmPermissionDO::getBizType).size() > 1
+ || convertSet(permissions, CrmPermissionDO::getBizId).size() > 1) {
throw exception(CRM_PERMISSION_DELETE_FAIL);
}
- // 鏍¢獙鎿嶄綔浜烘槸鍚︿负璐熻矗浜�
- CrmPermissionDO permission = permissionMapper.selectByBizAndUserId(permissions.get(0).getBizType(), permissions.get(0).getBizId(), userId);
- if (permission == null) {
- throw exception(CRM_PERMISSION_DELETE_DENIED);
+ // 璐熻矗浜哄彧鑳介�氳繃杞Щ鎿嶄綔鍙樻洿锛屼笉鑳界洿鎺ョЩ鍑哄洟闃�
+ if (anyMatch(permissions, permission -> CrmPermissionLevelEnum.isOwner(permission.getLevel()))) {
+ throw exception(CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER);
}
- if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) {
+
+ Integer bizType = permissions.get(0).getBizType();
+ Long bizId = permissions.get(0).getBizId();
+ CrmPermissionDO operatorPermission = permissionMapper.selectByBizAndUserId(bizType, bizId, userId);
+ boolean isOwner = operatorPermission != null
+ && CrmPermissionLevelEnum.isOwner(operatorPermission.getLevel());
+ if (!isOwner && !isSubordinateOwner(bizType, bizId, userId)) {
throw exception(CRM_PERMISSION_DELETE_DENIED);
}
@@ -289,6 +295,17 @@
permissionMapper.deleteByIds(ids);
}
+ /** 褰撳墠鐢ㄦ埛鐨勪笅灞炴槸鍚︿负璇ヤ笟鍔℃暟鎹殑璐熻矗浜� */
+ private boolean isSubordinateOwner(Integer bizType, Long bizId, Long userId) {
+ Set<Long> subordinateUserIds = convertSet(adminUserApi.getUserListBySubordinate(userId), AdminUserRespDTO::getId);
+ if (CollUtil.isEmpty(subordinateUserIds)) {
+ return false;
+ }
+ return anyMatch(permissionMapper.selectByBizTypeAndBizId(bizType, bizId),
+ permission -> subordinateUserIds.contains(permission.getUserId())
+ && CrmPermissionLevelEnum.isOwner(permission.getLevel()));
+ }
+
@Override
public void deleteSelfPermission(Long id, Long userId) {
// 鏍¢獙鏁版嵁瀛樺湪涓旀槸鑷繁
--
Gitblit v1.9.3