概述
Apollo 采用三层权限模型,从组织级别到单个项目 Board 提供精细的访问控制。权限层级
第一层:组织
在organization_members 中管理。控制组织范围的访问权限。
| 角色 | 权限 |
|---|---|
| Owner | 完全控制 — 计费、设置、成员管理、所有功能 |
| Admin | 管理成员、团队和大部分设置。不能删除组织或管理计费 |
| Member | 根据团队和 Board 角色访问功能。不能管理组织设置 |
| External Collaborator | 仅限访问特定分配的项目 |
第二层:团队
在team_members 中管理。控制团队范围内的资源。
| 角色 | 权限 |
|---|---|
| Lead | 管理团队设置、成员、功能配置和项目分配 |
| Member | 访问团队项目、任务、发布版本和知识库 |
第三层:Board(项目)
在user_project_access.board_role 中管理。控制每个项目的访问权限。
| 角色 | 权限 |
|---|---|
| Owner | 完全的项目控制 — 设置、成员、删除 |
| Editor | 创建和修改任务、发布版本和知识库页面 |
| Viewer | 对项目资源的只读访问 |
用户类型
从组织角色派生:| 用户类型 | 派生自 | 可见内容 |
|---|---|---|
| Internal | 组织中的 Owner、Admin 或 Member 角色 | 基于功能访问权限的完整平台 |
| Customer | Customer 用户类型 | 简化的仪表板、已分配的项目 |
| External Collaborator | 组织中的 External Collaborator 角色 | 仅特定分配的项目 |
路由保护
Apollo 在多个级别强制执行权限:<ProtectedRoute>— 需要身份验证(任何已登录用户)<FeatureRoute feature="...">— 需要为用户启用指定功能<InternalRoute>— 需要内部用户类型<AdminRoute>— 需要组织中的 admin 或 owner 角色
Row-Level Security (RLS)
所有数据库表都在 PostgreSQL 级别强制执行 Row-Level Security 策略。即使前端被绕过,数据库也会基于auth.uid() 强制执行访问规则。