|
@@ -1,7 +1,6 @@
|
|
package cn.iocoder.yudao.module.crm.util;
|
|
package cn.iocoder.yudao.module.crm.util;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
-import cn.hutool.core.util.ObjUtil;
|
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
|
|
import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
|
|
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
|
|
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
|
|
@@ -39,21 +38,20 @@ public class CrmPermissionUtils {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 构造 CRM 数据类型数据分页查询条件
|
|
|
|
|
|
+ * 构造 CRM 数据类型数据【分页】查询条件
|
|
*
|
|
*
|
|
* @param query 连表查询对象
|
|
* @param query 连表查询对象
|
|
* @param bizType 数据类型 {@link CrmBizTypeEnum}
|
|
* @param bizType 数据类型 {@link CrmBizTypeEnum}
|
|
* @param bizId 数据编号
|
|
* @param bizId 数据编号
|
|
* @param userId 用户编号
|
|
* @param userId 用户编号
|
|
* @param sceneType 场景类型
|
|
* @param sceneType 场景类型
|
|
- * @param pool 公海
|
|
|
|
*/
|
|
*/
|
|
public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType, SFunction<S, ?> bizId,
|
|
public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType, SFunction<S, ?> bizId,
|
|
- Long userId, Integer sceneType, Boolean pool) {
|
|
|
|
|
|
+ Long userId, Integer sceneType) {
|
|
MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class);
|
|
MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class);
|
|
final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id";
|
|
final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id";
|
|
// 1. 构建数据权限连表条件
|
|
// 1. 构建数据权限连表条件
|
|
- if (!CrmPermissionUtils.isCrmAdmin() && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限
|
|
|
|
|
|
+ if (!CrmPermissionUtils.isCrmAdmin()) { // 管理员,公海不需要数据权限
|
|
query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
|
|
query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
|
|
.eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对
|
|
.eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对
|
|
.eq(CrmPermissionDO::getUserId, userId));
|
|
.eq(CrmPermissionDO::getUserId, userId));
|
|
@@ -62,14 +60,14 @@ public class CrmPermissionUtils {
|
|
if (CrmSceneTypeEnum.isOwner(sceneType)) {
|
|
if (CrmSceneTypeEnum.isOwner(sceneType)) {
|
|
query.eq(ownerUserIdField, userId);
|
|
query.eq(ownerUserIdField, userId);
|
|
}
|
|
}
|
|
- // 2.2 场景二:我参与的数据
|
|
|
|
|
|
+ // 2.2 场景二:我参与的数据(我有读或写权限,并且不是负责人)
|
|
if (CrmSceneTypeEnum.isInvolved(sceneType)) {
|
|
if (CrmSceneTypeEnum.isInvolved(sceneType)) {
|
|
query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
|
|
query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
|
|
.eq(CrmPermissionDO::getBizId, bizId)
|
|
.eq(CrmPermissionDO::getBizId, bizId)
|
|
.in(CrmPermissionDO::getLevel, CrmPermissionLevelEnum.READ.getLevel(), CrmPermissionLevelEnum.WRITE.getLevel()));
|
|
.in(CrmPermissionDO::getLevel, CrmPermissionLevelEnum.READ.getLevel(), CrmPermissionLevelEnum.WRITE.getLevel()));
|
|
query.ne(ownerUserIdField, userId);
|
|
query.ne(ownerUserIdField, userId);
|
|
}
|
|
}
|
|
- // 2.3 场景三:下属负责的数据
|
|
|
|
|
|
+ // 2.3 场景三:下属负责的数据(下属是负责人)
|
|
if (CrmSceneTypeEnum.isSubordinate(sceneType)) {
|
|
if (CrmSceneTypeEnum.isSubordinate(sceneType)) {
|
|
AdminUserApi adminUserApi = SpringUtil.getBean(AdminUserApi.class);
|
|
AdminUserApi adminUserApi = SpringUtil.getBean(AdminUserApi.class);
|
|
List<AdminUserRespDTO> subordinateUsers = adminUserApi.getUserListBySubordinate(userId);
|
|
List<AdminUserRespDTO> subordinateUsers = adminUserApi.getUserListBySubordinate(userId);
|
|
@@ -79,24 +77,18 @@ public class CrmPermissionUtils {
|
|
query.in(ownerUserIdField, convertSet(subordinateUsers, AdminUserRespDTO::getId));
|
|
query.in(ownerUserIdField, convertSet(subordinateUsers, AdminUserRespDTO::getId));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- // 3. 拼接公海的查询条件
|
|
|
|
- if (ObjUtil.equal(pool, Boolean.TRUE)) { // 情况一:公海
|
|
|
|
- query.isNull(ownerUserIdField);
|
|
|
|
- } else { // 情况二:不是公海
|
|
|
|
- query.isNotNull(ownerUserIdField);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 构造 CRM 数据类型批量数据查询条件
|
|
|
|
|
|
+ * 构造 CRM 数据类型【批量】数据查询条件
|
|
*
|
|
*
|
|
* @param query 连表查询对象
|
|
* @param query 连表查询对象
|
|
* @param bizType 数据类型 {@link CrmBizTypeEnum}
|
|
* @param bizType 数据类型 {@link CrmBizTypeEnum}
|
|
* @param bizIds 数据编号
|
|
* @param bizIds 数据编号
|
|
* @param userId 用户编号
|
|
* @param userId 用户编号
|
|
*/
|
|
*/
|
|
- public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) {
|
|
|
|
|
|
+ public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query,
|
|
|
|
+ Integer bizType, Collection<Long> bizIds, Long userId) {
|
|
if (isCrmAdmin()) {// 管理员不需要数据权限
|
|
if (isCrmAdmin()) {// 管理员不需要数据权限
|
|
return;
|
|
return;
|
|
}
|
|
}
|