ObjectOS
配置权限

岗位

使用岗位对职能和受众锚点进行建模。

岗位(Positions)

岗位描述用户所承担的职能——"销售经理"、"支持坐席"、"审计员"。 自 ObjectStack 13(权限模型 v2,ADR-0090)起,岗位是唯一的人员分组概念: 旧的角色(Role)和简档(Profile)框架已合并为岗位,并从协议中移除。

岗位刻意保持扁平。岗位没有 parent 字段,也没有岗位层级—— 汇报结构和基于子树的可见性由业务单元树承载。

岗位职责

使用岗位来建模:

  • 职能("销售经理"、"招聘专员"、"审计员");
  • 应用、选项卡和知识库(Book)的受众定向;
  • 审批职责(类型为 position 的审批人会自动展开为当前岗位持有者);
  • 向持有相同职能的所有用户分发权限集

使用业务单元来建模组织架构(部门、区域、上下级结构),使用权限集来授予具体的对象、字段和系统能力。

系统对象

对象用途
sys_position岗位定义(扁平——无层级)
sys_user_position用户的岗位分配
sys_position_permission_set通过岗位分发的权限集
sys_business_unit用于层级和子树共享的组织架构树
sys_business_unit_member用户在业务单元中的成员身份(function_in_business_unit

对 RBAC 关联表(sys_user_positionsys_position_permission_setsys_user_permission_setsys_permission_set)的写入需要租户级管理员权限或 委托管理范围—— 仅对这些表授予普通 CRUD 权限是不够的。

受众锚点:everyoneguest

每个部署都会预置两个系统管理的岗位:

锚点持有者
everyone所有已认证的主体(隐式持有)
guest仅无会话(匿名)HTTP 主体

将权限集绑定到 everyone 可为所有已登录用户授予基线权限;绑定到 guest 可向匿名访问者开放内容。绑定是叠加式的,并且平台会拒绝将高权限集 (View All / Modify All、删除/清除/转移、系统权限、通配符)绑定到这些锚点。

配置的基线权限集(fallbackPermissionSet,默认 member_default)通过同一条 everyone 绑定路径生效。注意:自 ObjectStack 14.2 起,成员基线不再包含删除权限—— 记录删除必须按对象通过岗位分发的权限集显式授予。

带生效期的分配

岗位与权限集分配支持可选的 valid_from / valid_until 时间窗口 (半开区间,UTC;null 表示无界)。过期的授权会立即失效——适用于临时代班、 外包人员和与认证绑定的访问。每条授权可以记录 reason,委托授权还会记录 delegated_from

标记为 delegatable: true 的岗位允许其当前持有者在有限时间窗口内将岗位自助 委托给其他用户(必须设置未来的 valid_until,上限 30 天,且必须填写原因)。 分发了管理范围(adminScope)权限集的岗位永远不能被委托。

推荐模式

保持一组精简、稳定、以职能为单位的岗位:

Sales Manager
Sales Representative
Support Manager
Support Agent

用业务单元建模组织架构:

Sales
  ├─ EMEA
  └─ AMER
Support

然后为岗位附加权限集:

Sales Manager 岗位
  -> CRM User
  -> Sales Manager Access
  -> Report Viewer

这样可以保持岗位稳定,同时允许权限独立演进。

应避免

  • 为每个用户单独创建一个岗位;
  • 在每个岗位中重复定义所有权限;
  • 将岗位名称用作业务逻辑判断条件;
  • 在岗位上重建层级结构——子树可见性属于业务单元和记录共享
  • 在记录共享能更精确实现需求时,却通过管理岗位授予宽泛的访问权限。

从角色迁移(13 之前)

如果你要升级针对 ObjectStack 12 或更早版本编写的元数据:

旧版现行
sys_role / sys_user_role / sys_role_permission_setsys_position / sys_user_position / sys_position_permission_set
defineRole / RoleSchema(含 parentdefinePosition / PositionSchema(扁平)
元数据类型 roleprofileposition
共享接收者 role / role_and_subordinatesposition / unit_and_subordinates
PermissionSetSchema.isProfile已移除——isDefault 用于标记安装时的建议分配范围

角色层级必须重新建模为业务单元树。os lint 会通过 security-role-word 规则标记遗留的角色词汇。

On this page