崗位
使用崗位對職能和受眾錨點進行建模。
崗位描述使用者所承擔的職能——"銷售經理"、"支援坐席"、"審計員"。 自 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_position、sys_position_permission_set、
sys_user_permission_set、sys_permission_set)的寫入需要租戶級管理員許可權或
委託管理範圍——
僅對這些表授予普通 CRUD 許可權是不夠的。
受眾錨點:everyone 與 guest
每個部署都會預置兩個系統管理的崗位:
| 錨點 | 持有者 |
|---|---|
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_set | sys_position / sys_user_position / sys_position_permission_set |
defineRole / RoleSchema(含 parent) | definePosition / PositionSchema(扁平) |
後設資料型別 role 或 profile | position |
共享接收者 role / role_and_subordinates | position / unit_and_subordinates |
PermissionSetSchema.isProfile | 已移除——isDefault 用於標記安裝時的建議分配範圍 |
角色層級必須重新建模為業務單元樹。os lint 會通過 security-role-word
規則標記遺留的角色詞彙。