🔐 知识库权限说明

方案 A — 基于角色 + 部门层级 + 可见性的多维权限体系

👤 角色定义

角色标识说明
超级管理员admin企业内全部权限,不受部门限制
部门领导leader管辖本部门及所有子孙部门
普通员工employee仅操作自己的资源

🏢 部门管辖范围

角色可管辖的部门
admin企业所有部门
leader 所在部门 + 全部子孙部门
(递归 CTE 计算)
employee无管辖,仅属于一个部门

示例:技术部领导 → 管辖 技术部、前端组、后端组(全子树)

📚 知识库可见性

visibility可见范围
private仅创建者本人
department同部门所有成员 + admin
enterprise企业全员 + admin

leader 额外规则:本部门内任何可见性的知识库均可查看

📋 知识库操作权限矩阵

操作 admin leader(本部门KB) leader(子部门KB) employee(自己创建) employee(他人department/enterprise KB)
查看知识库 若可见性匹配
编辑/删除知识库 仅自己创建的 仅自己创建的
上传文件 需 allow_kb_upload=true 需 allow_kb_upload=true 需 allow_kb_upload=true 需 allow_kb_upload=true
查看文件列表 ✓ 全部文件 ✓ 全部文件 ✓ 全部文件 ✓ 全部文件

🗑️ 文件删除权限

谁能删条件
文件上传者本人无条件
admin同企业内任意文件
leader 上传者在其管辖子树内(即是其下属)
employee仅自己上传的文件

🔒 上传权限控制

条件能否上传
allow_kb_upload = true
且 能查看该 KB
✓ 允许
allow_kb_upload = false✗ 禁止(不论角色)
无权查看 KB✗ 禁止

谁能修改 allow_kb_upload?
admin → 任意用户  |  leader → 自己管辖的下属

📝 审计日志可见范围

角色可查看的日志
admin企业全员所有操作日志
leader 本部门及子孙部门成员的操作日志
employee无权查看审计日志

记录动作:upload / download / delete / create_kb / delete_kb / permission_change

⚙️ 管理功能入口

功能入口谁能用
设置部门负责人 管理后台 admin
修改任意用户上传权限 管理后台 admin
修改下属上传权限 前台·团队管理 leader
查看团队操作日志 前台·团队管理 leader
查看全企业操作日志 管理后台 admin

🚫 越级操作一律拒绝

场景结果说明
leader 操作非下属用户的权限 403 Forbidden is_subordinate() 检测不在子树内
leader 删除非下属上传的文件 403 Forbidden can_delete_file() 返回 False
employee 访问 private KB(非自己创建) 403 Forbidden can_view_kb() 返回 False
allow_kb_upload=false 的用户上传文件 400 Bad Request can_upload_to_kb() 返回 False
跨企业访问任何资源 403 Forbidden enterprise_id 强制校验

实现位置:backend/core/permissions.py  ·  路由层:backend/api/kb_file_router.py  ·  团队 API:backend/api/team_router.py