Кастомные должности

Свои роли с гранулярным набором прав по группам сущностей. Сейчас работают как «расширенный VIEWER» — реальное применение прав на дорожной карте.

Как создать

  1. Команда → кнопка «+ Добавить должность».
  2. В модалке:
    • Название — например, «Бухгалтер», «Менеджер по продажам».
    • Права — чекбоксы по группам.
  3. Сохранить.

Должность появится в списке. После создания её можно выбрать в дропдауне ролей при приглашении сотрудника.

Группы прав

При создании должности доступны 10 групп, каждая включает 2–3 разрешения (просмотр / редактирование / удаление):

| Группа | Что внутри | |---|---| | Операции | Создание, редактирование, удаление операций | | Счета | Создание, редактирование, архивирование счетов | | Категории | Управление категориями и иерархией | | Контрагенты | Создание и редактирование | | Проекты | Управление проектами | | Теги | Управление тегами | | Отчёты | Просмотр CashFlow, P&L, Balance, ... | | Аналитика | Расширенные отчёты (Performance, Projects) | | Команда | Просмотр / приглашение / удаление сотрудников | | Настройки | Биллинг, компания, ... |

Всего 22 разрешения.

Карточка должности

В списке должностей карточка показывает:

  • Имя.
  • Чипы первых 3 групп прав (например, «Операции · Счета · Отчёты»).
  • «и ещё N» если групп больше.
  • Счётчик прав (например, «12 прав»).

Текущее ограничение — важно

Сейчас кастомные должности под капотом работают как стандартный VIEWER. Что это значит:

  • Галочки в модалке создания должности сохраняются.
  • В карточке должности они отображаются.
  • Сотрудник с кастомной должностью видит что у него такая-то роль с такими-то правами.
  • Но RBAC middleware всё равно проверяет роль VIEWER — кастомные права в проверке доступа пока не учитываются.

То есть гранулярные права — пока декларативны, а не функциональны. Реальная защита у вас на уровне VIEWER (read-only).

Это видно в карточке должности — есть фиолетовый бейдж «На VIEWER-уровне» как напоминание.

Когда это поправят

В TODO Реальное применение прав CustomRole (пункт 28). Реализация ожидается через:

  • Либо добавление permissions JSON в JWT токен и замену requireRole(level) на requirePermission(key) в API-роутах.
  • Либо генерацию минимального enum-уровня из набора прав (например, «есть права на удаление операций → даём ADMIN»).

Что использовать пока

  • Если нужно read-only для бухгалтера — стандартная роль VIEWER.
  • Если нужно полный доступ кроме удаления — стандартная роль EDITOR.
  • Если нужно всё кроме настроек — стандартная роль ADMIN.
  • Если стандартных не хватает и нужны более сложные комбинации — пока подождите внедрения, либо используйте EDITOR + договорённости с командой о том, что они не делают.

Удаление должности

Команда → должности → Удалить. Сотрудники, которые были назначены на эту должность, переключаются в роль VIEWER.