组织、用户与权限
权限体系由认证身份、租户、组织、角色、菜单、按钮、字段可见性和数据库策略共同组成。管理目标是让用户只获得完成职责所需的能力。
权限链路
text
Supabase Auth 用户
→ 平台用户状态
→ 所属租户与组织
→ 一个或多个角色
→ 应用 / 目录 / 页面 / 按钮权限
→ 字段与数据范围
→ RLS、RPC、数据库函数或 Edge Function 再校验1
2
3
4
5
6
7
2
3
4
5
6
7
组织管理
组织用于表达部门、团队或业务单元。调整组织前先确认:
- 目标组织属于同一租户。
- 组织移动不会造成负责人、人员或数据范围失去归属。
- 删除前不存在仍在使用的下级组织或人员。
用户管理
用户维护包括账号状态、租户、组织和角色分配。停用用户用于立即阻止继续进入业务;删除 Auth 用户前还应考虑现有会话,因为删除用户本身不保证所有已签发访问令牌立即失效。
角色管理
角色授权树同时包含页面和业务按钮。分配时遵循:
- 先授予页面,再授予该页面下需要的按钮。
- 新增、编辑、删除、提交、审核、驳回、导出、AI 分析分别授权。
- 不给没有父页面的角色单独授予子按钮。
- 修改后用真实普通账号验证,不使用平台超级管理员代测。
菜单管理
业务导航来自 Supabase sys_menu,而非前端静态路由。菜单不出现时依次检查:
- 菜单记录是否存在且启用。
- 是否被隐藏,父目录是否可见。
app_code是否属于当前应用。component是否指向现有视图。- 当前角色是否拥有该菜单。
框架级公开页(登录、403、404、500 等)才使用静态路由。
平台超级管理员边界
平台超级管理员用于跨租户控制面:全局菜单、租户、网站发布、AI 配置和受控 AI 写入。普通的租户内用户、角色、字典和业务维护不应被错误地限制为“仅平台超级管理员”。平台超级管理员可以作为权限解析的隐式覆盖,但所有控制面操作仍应有明确按钮代码和服务端边界。
权限问题排查
| 问题 | 判断方法 |
|---|---|
| 页面看不到 | 查应用、菜单、角色与父目录 |
| 页面能看,按钮没有 | 查精确按钮权限 |
| 按钮有,提交失败 | 查服务端权限、记录状态和 RLS |
| 能读到其他租户数据 | 立即按安全问题处理,检查 RLS/RPC 租户谓词 |
| 角色修改未生效 | 刷新用户会话和菜单缓存后重试 |
