Space abilities
Контроль доступа внутри space: кто может читать артефакты, создавать, удалять, менять политики, вызывать agent edit и т.д.
Модель
- Core role на
SpaceMember:owner|editor|viewer. - Extension roles на
SpaceMember.extensionRoles:string[](напримерworkflow-engine.reviewer). - Abilities — строковые ID (
artifact.create,my-ext.approve). Core + расширения. - SpaceAbilityPolicy — persisted grants per space per role key:
Record<abilityId, boolean | { granted, config? }>. - Effective grants для пользователя = union по core role + extension roles, с учётом policy.
При создании space политики seed-ятся из core defaults + merged defaults всех загруженных расширений.
Enforcement
Единая точка — buildSpaceAbility / assertSpaceAbility в сервисах:
artifact-access.service.ts— read vs mutateartifact-tree.service.ts—artifact.readworking-copy.service.ts— edit vs previewSpaceMembermutations —space.manageMembers- Keystone
access.filterна Space / Artifact — safety net
Раньше проверялось только membership; сейчас viewer не может создавать/редактировать артефакты.
GraphQL (кратко)
| Query / Mutation | Назначение |
|---|---|
mySpaceAbilities(spaceId) | effective grants текущего пользователя |
spaceAbilityCatalog | каталог всех abilities (core + extensions) |
spaceAbilityPolicyRows(spaceId) | сырые policy rows (нужен space.read) |
setSpaceAbilityPolicy(spaceId, roleKey, grants) | правка policy (space.managePolicies, owner) |
updateSpaceMemberExtensionRoles(spaceMemberId, extensionRoles) | назначение extension roles |
Дальше
См. также краткий registry guide.