配置权限
记录访问
控制用户可以看到或修改哪些记录。
记录访问控制对象权限允许某操作之后,用户可以看到或修改的具体行。
机制
| 机制 | 用途 |
|---|---|
| 行级安全 | 强制租户或组织隔离 |
| 共享规则 | 按声明式条件授予访问 |
| 记录共享 | 授予某用户、岗位或"单元及下级单元"对特定记录的访问 |
| 所有权/层级 | 通过所有者和业务单元树授予访问 |
共享模型默认值
每个对象都声明(或继承)一个 sharingModel,用于设定组织级默认值:private、public_read、public_read_write 或 controlled_by_parent。
自 ObjectStack 13 起,带有所有者字段但未声明 sharingModel 的自定义对象默认使用私有模型——记录仅对其所有者(和管理员)可见,直到共享规则、记录共享或更宽的默认值将其开放。需要开放行为时请显式声明:
defineObject({
name: 'crm_lead',
sharingModel: 'public_read_write',
// …
});13 之前的别名 read、read_write、full 已被移除;os compile 会通过 security-owd-unset 与 security-owd-alias 校验规则标记未设置或使用别名的模型。
默认租户隔离
security 插件通过当前用户的上下文强制租户隔离。对标准平台对象,默认规则保护那些不带常规组织字段的全局表。
客户的现实期望是:
Users only see records that belong to their organization or records
explicitly shared with them.共享规则
把共享规则用于可复用的业务策略:
- 所有大区经理可以读取本区的 account;
- 支持经理可以查看升级的 case;
- 财务可以读取已批准的发票;
- 审计员可以读取标记为审计审查的记录。
记录共享
把记录共享用于例外情况:
- 把一个 opportunity 共享给某专家;
- 在升级期间临时授予访问;
- 把某条记录的访问授予一个外部集成。
排查可见性
当用户看不到一条记录时,按顺序检查:
- 用户是否已认证并处于预期组织?
- 用户是否拥有对象
read权限? - 该对象的
sharingModel是什么(自 ObjectStack 13 起自定义对象默认private)? - 行级安全是否允许该记录?
- 是否有共享规则应当生效?
- 是否存在直接的记录共享?
- 该记录是否归属于预期业务单元子树中的用户?
- 用户是否在正确的项目/主机名下?
解释引擎可以一次性回答上述所有问题——它报告每一层的判定结果,以及是哪条授权(或缺失的授权)决定了最终结果。