gaoluyang
5 天以前 d39e4f7d839167c16425086dfa2f8747bccfdff9
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
@@ -83,6 +83,11 @@
        if (CrmPermissionUtils.isCrmAdmin()) {
            return;
        }
        // 公海允许查看有负责人的客户;只授予读取权限,不影响写入、转移或领取权限。
        if (CrmBizTypeEnum.CRM_CUSTOMER.getType().equals(bizType)
                && CrmPermissionLevelEnum.isRead(permissionLevel) && isPublicPoolVisible(bizType, bizId)) {
            return;
        }
        // 特殊:没有数据权限的情况,针对 READ 的特殊处理
        if (CollUtil.isEmpty(bizPermissions)) {
            // 1.1 公海数据,如果没有团队成员,大家也应该有 READ 权限才对
@@ -98,13 +103,16 @@
            }
        }
        // 2. 只考虑自身的权限
        // 2. 只考虑自身的权限;离职交接完成后,交接人继承离职人对该数据的权限
        Long userId = getUserId();
        CrmPermissionDO userPermission = CollUtil.findOne(bizPermissions, permission -> ObjUtil.equal(permission.getUserId(), userId));
        if (userPermission != null) {
            if (isUserPermissionValid(userPermission, permissionLevel)) {
        CrmPermissionDO userPermission = null;
        for (Long ownerUserId : CrmPermissionUtils.getOwnerUserIds(userId)) {
            CrmPermissionDO candidate = CollUtil.findOne(bizPermissions,
                    permission -> ObjUtil.equal(permission.getUserId(), ownerUserId));
            if (candidate != null && isUserPermissionValid(candidate, permissionLevel)) {
                return;
            }
            userPermission = candidate != null ? candidate : userPermission;
        }
        // 3. 商机特殊处理:检查客户团队权限