Skip to content

Регистрация ролей и абилок расширения

Registries

Registry IDЧто регистрируется
backend.spaceAbilitiesAbility + defaults по core roles
backend.spaceRolesДополнительная роль (implies optional core role)

Объявите keys в manifest:

js
extendsRegistries: [
  { registryId: 'backend.spaceAbilities', keys: ['my-ext.approve'] },
  { registryId: 'backend.spaceRoles', keys: ['my-ext.reviewer'] },
],

Backend setup

ts
import { defineExtension } from '@artiroute/extension-sdk/extension';

export default defineExtension((ctx) => {
  ctx.registerSpaceRole({
    id: 'my-ext.reviewer',
    label: 'Reviewer',
    description: 'Can approve deliverables',
    implies: 'viewer', // optional: базовые grants как у viewer
  });

  ctx.registerSpaceAbility({
    id: 'my-ext.approve',
    label: 'Approve deliverables',
    category: 'My extension',
    defaults: {
      owner: true,
      editor: false,
      viewer: false,
    },
    // configSchema — опционально, для policy UI с config
  });
});

Именование

  • Ability ID: <extension-id>.<action> — глобально уникален в каталоге.
  • Role ID: <extension-id>.<roleName> → policy key ext:my-ext.reviewer.

Defaults и seeding

При создании space хост мержит:

  1. Core defaults для owner / editor / viewer
  2. Defaults всех registerSpaceAbility из загруженных расширений
  3. Записывает в SpaceAbilityPolicy per roleKey

Extension role получает отдельную policy row с key ext:<roleId>.

Использование в hooks

ts
ctx.registerEntityHook('artifact', 'beforeCreate', async (hookCtx) => {
  if (!hookCtx.ability?.can('my-ext.approve')) return;
  // ...
});

Демо

packages/extensions/registry-test/src/backend/index.tsregistry-test.demoAction, registry-test.demoReviewer.

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