mirror of
https://github.com/dataelement/bisheng.git
synced 2026-08-29 01:22:31 +08:00
ef5c3d11b4
F008 在 v2.5.0 把 service 层迁到 ReBAC,但漏掉了 2 个 DAO 层的权限过滤路径
(spec 措辞只点了 judge_role_access,遗漏 find_role_access 系列 + get_role_access
列表型)。这两处的实际后果是:F007 授权 UI 写入的 ReBAC 元组对它们无效,
管理员配了等于没配;多租户场景下 Root 通过 FGA shared_with 共享给 Child 的资源
也走不通这条消费路径。
KnowledgeDao.judge_knowledge_permission / ajudge_knowledge_permission
(被客户端日常模式 orgKbs 检索 + 工作流通用 KB 节点 user_auth=True 消费)
和 FlowDao.get_user_access_online_flows(被 Assistant.get_auto_flow_info 自动选
技能消费)现在都改走 LoginUser.init_login_user[_sync] + PermissionService
.list_accessible_ids('can_read', ...),admin 短路语义保留,owner / 部门管理员 /
租户管理员的隐式范围由 _finalize_accessible_ids 自动覆盖。
防回归:
- features/v2.5.1/release-contract.md 表 2 新增 INV-T19(DAO/Model 层禁止直读
RoleAccessDao 做权限过滤),列出 4 类例外白名单
- scripts/arch-guard.sh 加 RULE-8(PostToolUse per-file 钩子)
- scripts/check-rbac-rebac-leak.sh 新增(仓库级 one-shot 守卫,CI/pre-commit 用,
当前 exit 0 clean)
- features/v2.5.0/008-resource-rebac-adaptation/tasks.md 末尾追加 T12 补丁记录
测试:13 用例全绿(test_knowledge_dao_judge_permission_rebac.py 10 +
test_flow_dao_user_access_rebac.py 3),覆盖 admin 全集 / 普通用户交集 /
无交集 / 空入参 / 用户不存在 5 类边界。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>