Skip to content

Ролевая модель

Ролевая модель приложения подразумевает разграничение доступа для пользователя приложения:

  • к функциональности приложения в зависимости от роли пользователя
  • к конкретным объектам в зависимости от уровня доступа

Настройка авторизации

Для авторизации пользователей приложение использует провайдер Keycloak версии не ниже 23.0.

Гайдлайн актуален для KEYCLOAK__STRATEGY=introspect.

Для работы приложения необходимо не менее двух клиентов - публичный (получение токена) и приватный (валидация токена). Порядок действий по настройке Keycloak с нуля:

  1. Создать приватный клиент авторизации для приложения (KEYCLOAK__CLIENT_ID в настройках) и указать его секрет в KEYCLOAK__CLIENT_SECRET.
  2. В приватном клиенте приложения создать клиентские (!) роли, соответствующие уровням доступа, описанным в таблице ниже. Названия ролей соответствуют конфигурации в KEYCLOAK__ACCESS_ROLES.
  3. Выдать пользователям соответствующие клиентские роли приватного клиента. Роли на уровне realm не будут работать, даже с идентичными названиями.
  4. Создать новый клиент, который будет использоваться пользователями для получения токена при авторизации в приложении. Публичных клиентов может быть несколько.

Доступ к функциональности (эндпоинтам)

Роль пользователя определяет доступные пользователю действия:

Роль Описание
axiom_read Доступ к чтению каталога
axiom_transform axiom_read + Доступ к конструктору и трансформам
axiom_load axiom_transform + Доступ к загрузке данных
axiom_admin Полный доступ ко всем функциям приложения

Роль, необходимая для доступа к конкретному эндпоинту, описана в Product Map.

Доступ к объектам

Уровень доступа задается к следующим объектам:

  • загрузчики
  • датасеты
  • источники данных

Уровень доступа к объекту определяет доступные пользователю действия по отношению к объекту:

Уровень доступа Описание
no_access Ничего нельзя, запрещен даже просмотр
read Можно только просматривать и читать данные
full Полный доступ к объекту

Уровень доступа пользователя определяется по приоритетам: персональный уровень доступа назначенный пользователю -> базовый уровень доступа к объекту.

NB!: пользователь с ролью axiom_admin имеет доступ full ко всем объектам по умолчанию.

Базовый уровень доступа назначается при создании объекта и отображается в каталоге прав доступа со знаком *. Базовый уровень доступа при создании объекта настраивается через переменную окружения DEFAULT_PERMISSION_LEVEL.

При создании объекта его автор получает уровень доступа = full.

Уровень доступа по объекту (в т.ч. базовый) может быть изменен только пользователем с уровнем доступа к объекту = full или при наличии роли axiom_admin через специальные эндпоинты.

Для сегментов уровень доступа к загрузчику и датасету меняется синхронно и всегда совпадает.