Ролевая модель
Ролевая модель приложения подразумевает разграничение доступа для пользователя приложения:
- к функциональности приложения в зависимости от роли пользователя
- к конкретным объектам в зависимости от уровня доступа
Настройка авторизации
Для авторизации пользователей приложение использует провайдер Keycloak версии не ниже 23.0.
Гайдлайн актуален для KEYCLOAK__STRATEGY=introspect.
Для работы приложения необходимо не менее двух клиентов - публичный (получение токена) и приватный (валидация токена). Порядок действий по настройке Keycloak с нуля:
- Создать приватный клиент авторизации для приложения
(
KEYCLOAK__CLIENT_IDв настройках) и указать его секрет вKEYCLOAK__CLIENT_SECRET. - В приватном клиенте приложения создать клиентские (!) роли, соответствующие уровням доступа,
описанным в таблице ниже. Названия ролей соответствуют конфигурации в
KEYCLOAK__ACCESS_ROLES. - Выдать пользователям соответствующие клиентские роли приватного клиента. Роли на уровне realm не будут работать, даже с идентичными названиями.
- Создать новый клиент, который будет использоваться пользователями для получения токена при авторизации в приложении. Публичных клиентов может быть несколько.
Доступ к функциональности (эндпоинтам)
Роль пользователя определяет доступные пользователю действия:
| Роль | Описание |
|---|---|
| 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 через специальные эндпоинты.
Для сегментов уровень доступа к загрузчику и датасету меняется синхронно и всегда совпадает.