Права и роли: что реально видно на фронте
Проверено входом под каждым seed-пользователем 16.07.2026. Формальная матрица прав — в rbac_matrix, концепция — в Безопасность & RBAC.
Как устроена проверка
- Бэкенд: permission-коды (
projects.manage,logistics.manage,chat.write, …) по RBAC-ролям + Casbin по отделам + фильтр участия в проекте. - Фронт: навигация и элементы гейтятся CASL-парами
action/subject(read dashboard,read projects, …) изsrc/navigation/vertical/index.ts.
Что видит каждая роль (навигация)
| Раздел | admin | manager / logist / engineer / accountant / lawyer / executor (seed) |
|---|---|---|
| Главная (дашборд) | ✅ | ✅ |
| Проекты, Компании, Контакты | ✅ | ✅ |
| Задачи, Справочники (Оборудование, Локации), Логистика, Командировки | ✅ | ✅ |
| Оргструктура, Пользователи, Роли и права, Реквизиты, Отделы, Должности | ✅ | ❌ (скрыто) |
| Касса / Платежи / АРМ бухгалтера | нет в UI | нет в UI |
| Реестр договоров / АРМ юриста | нет в UI | нет в UI |
| Зарплата (payroll) | нет в UI | нет в UI |
| Чаты | плавающая кнопка (пункта меню нет) | то же |
Главный вывод
Все seed-пользователи — менеджеры
У logist@, engineer@, accountant@, lawyer@, executor@ системная роль — manager. Функция (global_function) и роль в команде проекта на видимость разделов почти не влияют. Поэтому:
- инженер и бухгалтер видят «Логистику», «Компании», справочники и успешно дергают
GET /logistics,GET /equipmentи т.д. — это не дыра в правах, а следствие роли manager; - проверить фронт за «чистого» инженера (
role=engineer), сотрудника (employee) или директора (director) через seed нельзя.
Доработка сида: создавать пользователей с настоящими ролями (engineer, employee, accountant, lawyer, director), чтобы регресс прав был воспроизводим. Иначе клиент на тесте увидит «у всех всё есть».
Что проверено и работает
- Разделы «Администрирование» скрываются у не-админов — ✅.
- Фильтр участия: менеджер видит проект, где он в команде/ответственный — ✅. Seed теперь позволяет отдельно проверять
employee/engineerбез manager-bypass. - Статус участника команды «Ожидает» после добавления — механика подтверждения участия (team_requests) на бэке есть; в UI подтверждение приглашения не найдено — уточнить, где участник должен принимать приглашение.
- Логист видит «Заявки от менеджеров» и может открывать заявки любого проекта (RBAC-роль
logisticianпоglobal_function) — ✅.
Замечания к правам
- АРМ бухгалтера/юриста и payroll не выведены на фронт вообще — бэкенд-модули и permissions (
accounting.view/manage,legal.view/manage,payroll.*) существуют, документация описывает АРМы, но в навигации их нет ни у одной роли. Либо выводить разделы, либо помечать в доках как «не реализовано в UI». - Генерация документов:
hasDocumentPrivilegesпускаетadminили обладателяdocuments.manage. Permission уже заведён миграцией0057и выданadmin,manager,head_of_department; веткаproject_managerудалена. - Список «Ответственный» в задачах и «Водитель» в логистике не ограничены командой проекта/ролями — можно назначить кого угодно.
- Дашборд («Выезды», «Объём работ», «Прогресс проектов») показывает одинаковые цифры всем ролям — проверить, что данные не глобальные, а по scope пользователя (для manager-ролей выглядит как глобальная статистика).