Матрица прав доступа: Защита данных и чистый интерфейс

Как мы навсегда избавились от экранов «Доступ запрещен». Разбираем архитектуру RBAC, где интерфейс сам подстраивается под должность сотрудника.

Одна из главных болей растущего производства — это коммерческая тайна и чистота данных. Если менеджер по продажам видит цены, по которым снабженец покупает металл, он может слить базу конкурентам. Если технолог может случайно отредактировать финансовый отчет — ждите кассового разрыва.

В старых системах эта проблема решается "костылями": программист пишет сотни условий if (user == 'admin') в коде. В итоге система становится неподдерживаемой. В ModernERP Pro мы внедрили строгую Матрицу доступов (Role-Based Access Control — RBAC).

Идеальная ERP работает по принципу «Умной слепоты». Мы не показываем сотруднику красные таблички «Вам сюда нельзя». Мы вообще не показываем ему кнопки и разделы, к которым у него нет доступа.

Три координаты безопасности

Вся архитектура безопасности (`RolePermission`) держится на трех жестко типизированных координатах (через PHP Enums):

  1. Роль (Role): Кто этот человек? (Технолог, Контролер ОТК, Финдир, Директор).
  2. Раздел (Section): К какой части системы он обращается? (Финансы, Склад, Производство, Справочники).
  3. Уровень доступа (Permission): Что он может делать? (VIEW - только чтение, EDIT - редактирование, FULL - полный доступ с правом удаления).

База данных хранит эти связи в уникальном индексе `UNIQ_role_section`. Это гарантирует математическую точность: у одной роли не может быть двух противоречащих друг другу правил для одного раздела.

Роль сотрудника Модуль: Склад Модуль: Техкарты Модуль: Финансы
Директор (Admin) FULL (Полный) FULL (Полный) FULL (Полный)
Финдир / Главбух VIEW (Чтение) VIEW (Чтение) FULL (Полный)
Технолог VIEW (Чтение) FULL (Полный) НЕТ ДОСТУПА
Кладовщик FULL (Полный) НЕТ ДОСТУПА НЕТ ДОСТУПА

Магия кэширования: Интерфейс без «мертвых кнопок»

Что происходит, когда Директор заходит в настройки и забирает у Технолога право просматривать Склад?

В большинстве веб-приложений сотруднику нужно выйти из аккаунта и зайти заново, чтобы меню обновилось. В ModernERP Pro мы используем глубокую интеграцию с TagAwareCache.

🛠 Инвалидация кэша на лету

В контроллере `RolePermissionController` при сохранении новой матрицы доступов срабатывает одна важнейшая строчка кода:

$cache->invalidateTags(['menu']);

Система мгновенно сбрасывает закэшированное боковое меню для всех пользователей на заводе. В ту же секунду у всех Технологов с экранов исчезает кнопка «Склад». Им не нужно перезагружать страницу. Они просто больше не видят то, что им не положено видеть. Интерфейс остается кристально чистым.

Бизнес-ценность: Фокус и Безопасность

Внедрение жесткого RBAC решает сразу две проблемы:

  • Безопасность: Злоумышленник не может получить доступ к P&L (Отчету о прибылях) или клиентской базе, потому что бэкенд на уровне контроллеров проверяет `PermissionEnum`. Даже если попытаться ввести прямой URL в адресную строку — система отклонит запрос на уровне ядра (через метод `denyAccessUnlessGranted`).
  • Онбординг (Обучение новичков): Когда новый контролер ОТК садится за компьютер, он не пугается интерфейса со 100 непонятными кнопками. В его боковом меню есть только одна вкладка: «Заказы на проверку качества». Система ведет его за руку, не давая совершить ошибку в незнакомом разделе.

Чек-лист: 10 дыр в цеху, через которые утекает ваша прибыль

Не готовы к аудиту? Начните с самодиагностики. Мы собрали 10 неочевидных признаков того, что мастера водят вас за нос, а НЗП съедает оборотку предприятия.

  • Как за 5 минут проверить, есть ли на складе неликвиды.
  • 3 неудобных вопроса мастеру, чтобы вскрыть приписки.
  • Тест на «узкое горлышко»: почему склад готовой продукции пуст.
Откроем материал сразу. Без рассылок.