Camunda人工任务无法阻止非候选组用户认领执行任务的配置问题
Camunda 候选组/候选用户访问限制强制生效配置方案
基于SpringBoot搭建Camunda BPM项目时,若出现人工任务配置的候选组、候选用户规则不生效,非授权用户仍可查看、认领、完成任务的问题,按以下步骤完成配置即可强制权限校验:
1. 开启全局授权校验开关
默认情况下Camunda的权限校验是关闭状态,这是最常见的踩坑点,首先在SpringBoot配置文件中打开授权校验相关配置:
- YAML格式配置(application.yml):
camunda.bpm: authorization: enabled: true # 全局授权校验总开关 task-check: true # 开启任务级权限校验 user-based-access-check: true # 开启基于用户/组关系的访问校验
- Properties格式配置(application.properties):
camunda.bpm.authorization.enabled=true camunda.bpm.authorization.task-check=true camunda.bpm.authorization.user-based-access-check=true
2. 调整Cockpit默认授权规则
Cockpit默认的权限配置会绕过业务层面的候选组限制,需要手动调整:
- 测试权限规则时不要使用
camunda-admin组下的用户,该组默认持有全量资源的所有操作权限,会导致权限测试结果不符合预期。需新建普通测试用户,仅分配业务对应分组,不要加入管理员组。 - 进入Cockpit授权管理页面,检查全局授权规则,删除给所有认证用户配置的
TASK_READ、TASK_WORK全量授权,这类默认配置会让所有登录用户都能看到全量任务。 - 核对流程定义中人工任务配置的候选组ID,确保和系统内创建的用户组ID完全一致,Camunda的权限ID匹配是大小写敏感的。
3. 强制任务操作环节的权限校验
- 检查流程定义的人工任务配置,确认
candidateGroups、candidateUsers字段没有配置通配符*,该配置代表所有用户都有权限操作任务。 - 排查自定义扩展代码:如果项目中实现了TaskListener、任务相关拦截器,检查是否存在调用
taskService.addCandidateUser()手动给非授权用户加权限、或者手动设置skipAuthorizationCheck=true跳过权限校验的逻辑。 - 添加进程引擎配置插件,禁止全局跳过权限校验:
import org.camunda.bpm.engine.impl.cfg.AbstractProcessEnginePlugin; import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CamundaAuthConfig { @Bean public AbstractProcessEnginePlugin authCheckPlugin() { return new AbstractProcessEnginePlugin() { @Override public void postProcessEngineBuild(ProcessEngineConfiguration processEngineConfiguration) { processEngineConfiguration.setSkipAuthorizationCheckEnabled(false); processEngineConfiguration.setAuthorizationCheckRevokesEnabled(true); } }; } }
4. 权限规则验证步骤
配置完成后按以下逻辑验证规则是否生效:
- 新建两个普通测试用户:user1归属配置的候选业务组,user2归属无权限的其他业务组,两个用户均不加入
camunda-admin管理员组。 - 启动流程实例,流转到配置了候选组的人工任务节点。
- 使用user2账号登录Cockpit,确认任务列表无法查询到对应任务,直接调用任务认领、完成接口会抛出权限不足的异常。
- 使用user1账号登录,确认可以正常查询、认领、完成对应任务。
注意:调用Camunda REST API操作任务时,必须携带对应用户的认证信息,未携带认证信息的请求会默认以管理员权限执行,绕过所有权限校验。
内容的提问来源于stack exchange,提问作者Mike M
相关产品推荐
相关产品推荐

