flowable不内置rbac,需在spring boot中集成:流程启动、任务拾取、任务提交三处校验;通过listener调用权限服务、候选组动态解析、securitycontext共享及异步线程上下文传递实现。

目前没有名为“Fiber”的主流权限控制框架——你实际想查的,极大概率是 Flowable 工作流框架中集成 RBAC 权限控制的方案,或者误将 fiber(Go 语言轻量 Web 框架)与权限系统混淆。而知识库中唯一明确关联的是 snakezhong/newfiber-workflow-release 这个基于 Flowable 的 Java 工作流项目,它本身不内置 RBAC,需自行扩展。
Flowable 中如何接入角色权限(Role-based)校验
Flowable 是流程引擎,不负责用户身份与权限管理,RBAC 必须由宿主系统(如 Spring Boot)提供。它的权限校验点集中在三处:流程启动、任务拾取、任务提交。
-
ProcessEngineConfiguration.setCustomPostLoadProcessDefinitionCallback()可用于在流程定义加载后注入角色检查逻辑(例如:只允许admin启动某类流程) - 任务查询时,用
TaskQuery.taskCandidateGroupIn(List<string>)</string>或taskCandidateUser(String)结合角色映射表过滤——不能直接传"editor",得先查出该角色对应的所有用户 ID 列表 - 任务提交前,在
ExecutionListener或TaskListener中调用你的权限服务,例如:authService.hasPermission(userId, "process:approve:invoice")
为什么不能直接在 Flowable 表里加 role 字段
Flowable 的 ACT_ID_GROUP 和 ACT_ID_MEMBERSHIP 表虽支持组(group),但它仅用于任务候选组分配,不是 RBAC 意义上的“角色”。硬塞业务角色字段会导致:
- 权限变更无法触发 Flowable 缓存刷新,旧流程实例仍按历史角色执行
-
GroupIdentityService不参与 Spring Security 或 Shiro 的认证链,@PreAuthorize("hasRole('finance')")对 Flowable 任务无效 - 审计日志中无法追溯“谁以什么角色执行了哪步”,因为 Flowable 日志只记 user_id,不记 role_context
Spring Boot + Flowable + RBAC 的最小可行集成点
真正起效的权限控制必须落在 Spring Security 的 Filter 链和 Flowable 的 Listener 之间,且共用同一套权限判断逻辑。
- 登录成功后,把用户拥有的角色列表(如
["hr", "approver"])和对应权限字符串集合(如["leave:apply", "leave:approve"])存入SecurityContext,而非只存 username - 自定义
ProcessEngineConfigurationbean,注入SpringSecurityAwareProcessEngineConfiguration,使 Flowable 能感知当前Authentication - 在
TaskService.createTaskQuery().taskCandidateGroupIn(...)前,先调用你的roleService.resolveGroupsForPermission("process:submit"),把权限转为 group ID 列表 - 所有 Flowable REST 接口必须过
@PreAuthorize("hasPermission('flowable:read')"),避免绕过前端直连引擎
最容易被忽略的是:Flowable 的异步任务(如定时边界事件、消息中间事件)运行在独立线程,SecurityContext 默认不传播——必须显式用 SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL) 并在异步执行前手动 setContext(),否则权限校验永远失败。











