👤 角色定义
| 角色 | 标识 | 说明 |
| 超级管理员 | 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 强制校验 |