配置权限
权限
身份、角色、权限集、记录访问与字段安全 —— 一页讲完整套访问模型。
权限
ObjectOS 借鉴企业软件二十年来行之有效的分层访问模型:身份 → 角色 → 权限集 → 记录访问 → 字段安全。每一层回答一个不同的问题,你可以忽略用不到的层。
一张图说明模型
Authentication Who is the caller?
↓
Identity Which user/org/membership is active?
↓
Roles Where do they sit in the hierarchy?
↓
Permission sets What CAN they do — apps, objects, fields, system?
↓
Record access WHICH records can they touch?
↓
Field security For those records, which FIELDS are readable / writable?每一层都由 security 插件强制执行。简单应用可以只使用权限集(不用角色、不用共享规则),等需求出现时再增补其余层。
第 1 层 —— 身份
身份对象存在你的项目数据库中。最重要的几个:
| 对象 | 表示什么 |
|---|---|
sys_user | 一个能认证的人或服务账号 |
sys_org | 租户/工作空间边界(多租户应用) |
sys_member | 用户在某组织内的成员资格(按成员资格分配角色) |
sys_department、sys_team | 可选的组织结构,用于共享规则 |
sys_invitation | 待接受的邀请 |
sys_session | 已认证的活动会话 |
sys_api_key | 绑定到用户的长期编程凭据 |
在多租户部署中:
- 用户作用域限定到项目数据库。
- 会话作用域限定到项目主机名。
- 行级检查使用当前用户所在组织和权限。
- 控制面用户不会自动成为业务用户——必须通过平台 SSO 或显式预置进行映射。
你可以在运行时通过 Console(/_console/)创建/管理这些对象,也可以在 objectstack.config.ts 中为全新环境种入。
第 2 层 —— 角色
角色对组织结构建模(CFO → 财务经理 → 分析师)。它们存在的主要目的是让共享规则和报表能表达诸如"记录所有者的上级"之类的关系。需要层级访问时用角色;扁平团队则跳过。
参见 Roles。
第 3 层 —— 权限集
权限集是授予能力的主要方式。它们直接附加到用户,或通过角色附加。
它们授予什么
| 类型 | 示例 |
|---|---|
| 应用访问 | 打开 CRM、打开支持门户 |
| 对象权限 | 对某对象的记录进行 增/查/改/删 |
| 字段权限 | 读取或更新特定字段 |
| 系统权限 | 访问 Console、运行报表、导出数据、查看审计日志 |
| 集成权限 | 使用 API Key、配置 Webhook、执行管理操作 |
对象权限标志
这些是 security 插件实际检查的标志名称:
| 标志 | 含义 |
|---|---|
allowRead | 读取通过记录访问可见的记录 |
allowCreate | 创建新记录 |
allowEdit | 更新用户可见的记录 |
allowDelete | 删除用户可见的记录 |
viewAllRecords | 读取该对象每一条记录,忽略记录访问规则 |
modifyAllRecords | 更新/删除每一条记录;隐含 viewAllRecords |
viewAllRecords 与 modifyAllRecords 是对该对象的租户级超级用户授权。仅在显式的管理权限集中使用,不要放进任何面向普通用户的角色。
参见 Permission Sets。
第 4 层 —— 记录访问
对于没有 viewAllRecords 的用户,他们能看到哪些行?
模型支持:
- 隐式所有权(用户创建或拥有的行)
- 共享规则(声明式 —— "团队 A 能看到团队 A 的记录")
- 显式共享(
sys_record_share行——一次性共享) - 组织作用域(行的
org_id与用户所在组织匹配)
参见 Record Access。
第 5 层 —— 字段安全
即使用户能看到记录,单独的字段也可以是:
- 隐藏 —— 字段被从 API 和 UI 响应中剥离。
- 只读 —— 字段返回,但写入会被拒绝。
字段安全是按对象 + 按权限集设定的。典型用途:
- 把
sys_user上的salary对 HR 之外的所有人隐藏。 - 把
external_account_id对支持代表设为可读但不可编辑。
它在与对象权限相同的求值器中强制执行,因此在 REST、ObjectQL 和 Console 上统一生效。
从哪里入手
| 如果你在构建 …… | 使用 |
|---|---|
| 单团队的内部工具 | 仅权限集 |
| 多团队、经理需要看报表的应用 | 角色 + 权限集 |
| 多租户 SaaS 形态的应用 | 组织作用域 + 权限集 |
| 带 PII 的合规应用 | 在上面叠加字段安全 |
| 复杂的 CRM 类应用 | 完整栈 |
诊断与审计
/_console/显示任一用户当前评估出的有效权限。- 审计日志(
sys_audit_log)记录权限敏感变更——授权、角色分配、权限集编辑。 - 被拒请求记录失败的具体规则(对象权限 vs 记录访问 vs 字段安全),便于支持人员快速回答"为什么我看不到这个?"。