Permission — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

Permission

Разрешение в Versola — именованный набор эндпоинтов ресурсов; выдается пользователям через роли, а service app — напрямую

Разрешение (permission) — именованный набор эндпоинтов ресурсов. Роли и service-клиенты описывают с его помощью, что им можно вызывать. Эндпоинты напрямую не перечисляет ни роль, ни клиент. Общая картина описана в разделе Сущности.

Поля

ПолеЧто этоПравила
Permission IDИмя, на которое ссылаются роли и клиентыСтрочные латинские буквы, цифры, подчеркивания и дефисы в сегментах, разделенных только :; каждый сегмент начинается с буквы (^[a-z][a-z0-9_-]*(:[a-z][a-z0-9_-]*)*$). Допустимы orders:read, orders:write:managed и auth-settings:manage. Точки отклоняются и консолью, и Central API везде, где ID разрешения создается, обновляется или указывается (в роли или клиенте). Уникален в пределах тенанта. После создания не меняется
English descriptionПодпись разрешения в консолиНеобязательно. Если оставить пустым, консоль сохранит в описании сам ID
Ресурсы и эндпоинтыЭндпоинты, которые покрывает разрешениеВыбираются из ресурсов того же тенанта. Разрешение может охватывать несколько ресурсов

Ни форма, ни Central API не задают максимальную длину ID и описания.

В ID разрешений сегменты разделяются двоеточием. В ID scope нет ни двоеточий, ни точек.

Список можно отфильтровать по All, Unlinked и Detached и по ресурсу: поле Resource — это typeahead, введите часть хоста, чтобы сузить варианты, и выберите один. В строке не больше двух ресурсов и двух эндпоинтов, остальные скрыты за +N; наведите курсор, чтобы их прочитать. Панель разрешения перечисляет эндпоинты под хостом каждого ресурса.

Что на что ссылается

  • Разрешение хранит ID эндпоинтов, а не метод и путь. Список эндпоинтов на странице разрешения собирается по ресурсам.
  • Роль перечисляет ID разрешений. Клиент типа service тоже.
  • В таблице эндпоинтов ресурса колонка Who may call показывает разрешения, которые покрывают каждый эндпоинт. Несколько разрешений — это альтернативы: достаточно любого одного.

edge использует разрешения двумя путями:

  • Через роль. Токен пользователя несет ID ролей, а edge собирает разрешения всех этих ролей в тенанте токена. Пользователь с ролью, в которую входит разрешение, может вызывать каждый эндпоинт, который оно покрывает.
  • Напрямую у клиента. При grant client_credentials пользователя нет, поэтому edge читает собственные разрешения service-клиента. Разрешения клиента он читает только для таких токенов.

Покрытие эндпоинта необходимо, но недостаточно. edge все равно вычисляет Allow (CEL) эндпоинта, step-up и max auth age. См. Политики эндпоинтов.

Изменение и удаление

Можно менять описание, добавлять и убирать ресурсы и эндпоинты. Permission ID не редактируется.

Если эндпоинт позже убрали из ресурса или ресурс удалили, разрешение сохраняет устаревшую ссылку и показывает ее в блоке Detached endpoints с кнопкой удаления.

Удаление разрешения стирает только запись разрешения и требует подтверждения. Роли и клиенты сохраняют его ID в своих списках, но он больше не покрывает ни одного эндпоинта и ничего не дает. edge применит изменение после следующего обновления конфигурации. Это касается и уже выданных токенов, потому что edge читает разрешения при каждом запросе.

Что дальше