Роли — Список

Список пользовательских и системных ролей франшизы с возможностью перехода в архив удалённых.

Источники

Скрытые роли владельцев партнёров не отображаются

(Введено в BR 1.4.4 §5.2) — Бэк фильтрует список по owner_legal_entity_id IS NULL (default). Скрытые роли управляются через карточку ЮЛ партнёра, вкладка «Права» — см. Юр. лица — Карточка.


Маршрут

  • /roles — активные роли (default)
  • /roles?archive=1 — архив удалённых

Доступ

(Обновлено в BR 1.4.4 — без enum, через scope + permissions)

КтоДоступ
Владелец франшизыПолный (CRUD + удаление + восстановление)
Владелец партнёраТолько просмотр активных ролей, назначенных его сотрудникам (для понимания ролевой модели; назначение — через сотрудников)
Обычный сотрудникЕсли permission roles.read — просмотр; roles.edit — CRUD (обычно не выдаётся). Иначе пункт меню «Роли» скрыт, прямой URL → 403

Layout

Шапка

  • Заголовок: «Роли» (или «Удалённые роли» в режиме архива)
  • Справа кнопки:
    • «Добавить роль» (primary, только владелец франшизы / roles.edit, только в активном режиме)
    • «Удалённые роли» (ghost-link, только владелец франшизы, переключает на ?archive=1)
    • В архиве — кнопка «Назад к активным» вместо «Удалённые роли»

Фильтры (над таблицей)

ФильтрТипОписание
ТипRadioВсе / Пользовательские / Системные
ПоискText input с иконкой лупыПо названию, case-insensitive

Таблица

КолонкаИсточникОписание
НазваниеnameЖирный; если is_system=true — слева иконка шестерёнки + tooltip «Системная роль»
Описаниеdescription или «—»Truncate до 60 символов, tooltip полный текст
Сотрудниковemployee_countЧисло. Если > 0 — кликабельное, ведёт на /employees?role_id={id}
Созданаcreated_atДата в формате DD.MM.YYYY
ДействияМеню «…»: Редактировать, Удалить (скрыто если is_system или employee_count > 0)

Клик по строке (кроме меню «…» и ссылки на сотрудников) → карточка /roles/:id.

Пагинация

Нижняя пагинация: по 20 на страницу, навигация по номерам страниц.


Состояния

СостояниеЧто показываем
Загрузка5 skeleton-строк в таблице
Пусто (нет ни одной роли)Illustration + текст «Создайте первую роль для ваших сотрудников» + CTA «Добавить роль» (для admin_franchise)
Пусто (фильтр)«Роли не найдены. Попробуйте изменить фильтр»
Архив пуст«В архиве пока нет удалённых ролей»
Ошибка загрузкиGeneric error с кнопкой «Повторить»

Взаимодействия

Удаление через меню «…»

  1. Клик «Удалить» → модалка подтверждения «Удалить роль “{name}”?»
  2. При ROLE_IN_USE (409) — модалка меняется на предупреждение со списком сотрудников (см. Роли — Карточка) + кнопка «Открыть список сотрудников с этой ролью» (ведёт на /employees?role_id={id})
  3. Успех → toast «Роль перенесена в архив», строка исчезает из списка

Восстановление (режим архива)

  • В строке вместо меню «…» — кнопка «Восстановить»
  • Клик → POST /roles/{id}/restore, toast «Роль восстановлена», строка исчезает из архива

Клик по employee_count > 0

Переход на /employees?role_id={id} — страница сотрудников с предустановленным фильтром.


API

GET /api/v1/admin/roles с query:

  • status=active (default) или status=deleted для архива
  • is_system=true|false при выбранном фильтре
  • search=... при вводе
  • page, per_page

Response см. в контракте.

Бэк всегда применяет фильтр owner_legal_entity_id IS NULL (default) — скрытые роли владельцев партнёров не возвращаются. (Обновлено в BR 1.4.4)

Для владельца партнёра фронт получает только роли, назначенные его сотрудникам (фильтрация на бэке через scope).


Ссылки