Skip to content

Core-роли и каталог абилок

Источник правды: apps/backend/src/modules/spaces/abilities/core-abilities.ts.

Core roles

RoleНазначение
ownerПолный контроль space, members, policies, удаление артефактов
editorСоздание и редактирование артефактов, без управления space
viewerТолько чтение

Core abilities (матрица по умолчанию)

Ability IDownereditorviewerКатегория
space.readSpace
space.manageSpace
space.manageMembersSpace
space.managePoliciesSpace
artifact.readArtifacts
artifact.createArtifacts
artifact.updateArtifacts
artifact.deleteArtifacts
artifact.moveArtifacts
artifact.runActionArtifacts
artifact.agentEditArtifacts
artifact.manageVersionsArtifacts
template.useTemplates
template.createTemplates
template.manageTemplates

Owner space может переопределить grants в UI политик (см. policies) — например запретить artifact.delete для editor.

Маппинг на CASL

Ability ID маппится на проверки вида can(action, subject):

  • artifact.create → создание Artifact в данном spaceId
  • space.managePolicies → mutation setSpaceAbilityPolicy

Расширения добавляют свои ability ID; core не знает их семантику, только хранит grants.

Проверка в коде хоста

typescript
import { buildSpaceAbility } from '../spaces/abilities';

const ability = await buildSpaceAbility(context, { userId, spaceId });
ability.assert('artifact.update');
if (ability.can('artifact.agentEdit')) { /* ... */ }

В entity hooks доступен тот же checker: hookCtx.ability?.can('artifact.create').

AI workspace для командных материалов и знаний