Политики и назначение ролей
SpaceAbilityPolicy
Keystone list: одна строка на пару (space, roleKey).
| Поле | Описание |
|---|---|
space | FK Space |
roleKey | owner | editor | viewer | ext:<extensionRoleId> |
grants | JSON: abilityId → boolean или { granted, config? } |
updatedBy | User |
Кто может менять
setSpaceAbilityPolicy— только приspace.managePolicies(по умолчанию owner).- Назначение
extensionRolesна member —space.manageMembers.
GraphQL
graphql
query {
spaceAbilityPolicyRows(spaceId: "…") {
# структура из loadSpaceAbilityPolicies
}
}
mutation {
setSpaceAbilityPolicy(
spaceId: "…"
roleKey: "editor"
grants: { "artifact.delete": false, "my-ext.approve": true }
)
}
mutation {
updateSpaceMemberExtensionRoles(
spaceMemberId: "…"
extensionRoles: ["my-ext.reviewer"]
)
}Effective grants
Для текущего пользователя в space:
graphql
query {
mySpaceAbilities(spaceId: "…")
}Возвращает плоский Record<string, boolean> — уже с учётом core role, extension roles и policy overrides.
UI хоста
SpaceSettingsDrawer— вкладки настроек space (проверкаuseSpaceAbility).SpaceAbilityPolicyMatrix— матрица policy для owner (useSpaceAbilityPolicies).
Расширение может добавить свой tab через app.settingsTabs или slot, но редактирование core policy matrix — в хосте.