Commit 052c8f5ddab368b7456669a21088201d00819213

Authored by 芋道源码
Committed by GitHub
2 parents 1572855b 8c0a1961

Merge pull request #1221 from dadiyang/fix/crm-permission-aspect-system-context

[FIX] CRM:数据权限切面对无登录用户的系统调用放行,修公海自动掉落 Null key 恒失败(A34)
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
@@ -45,6 +45,13 @@ public class CrmPermissionAspect { @@ -45,6 +45,13 @@ public class CrmPermissionAspect {
45 45
46 @Before("@annotation(crmPermission)") 46 @Before("@annotation(crmPermission)")
47 public void doBefore(JoinPoint joinPoint, CrmPermission crmPermission) { 47 public void doBefore(JoinPoint joinPoint, CrmPermission crmPermission) {
  48 + // 0. 系统调用(定时任务/异步线程等,无登录用户)不走数据权限校验,直接放行。
  49 + // 数据权限是“按登录用户”的访问控制;/admin-api 外部请求必然有登录用户,
  50 + // 故登录用户为 null 只可能是系统内部调用(如公海自动掉落定时任务),属可信进程。
  51 + // 若在此校验,isCrmAdmin() 会以 null 用户查缓存,抛 Null key 异常导致业务失败。
  52 + if (getUserId() == null) {
  53 + return;
  54 + }
48 // 1.1 获取相关属性值 55 // 1.1 获取相关属性值
49 Map<String, Object> expressionValues = parseExpressions(joinPoint, crmPermission); 56 Map<String, Object> expressionValues = parseExpressions(joinPoint, crmPermission);
50 Integer bizType = StrUtil.isEmpty(crmPermission.bizTypeValue()) ? 57 Integer bizType = StrUtil.isEmpty(crmPermission.bizTypeValue()) ?