Одна из главных болей растущего производства — это коммерческая тайна и чистота данных. Если менеджер по продажам видит цены, по которым снабженец покупает металл, он может слить базу конкурентам. Если технолог может случайно отредактировать финансовый отчет — ждите кассового разрыва.
В старых системах эта проблема решается "костылями": программист пишет сотни условий if (user == 'admin') в коде. В итоге система становится неподдерживаемой. В ModernERP Pro мы внедрили строгую Матрицу доступов (Role-Based Access Control — RBAC).
Три координаты безопасности
Вся архитектура безопасности (`RolePermission`) держится на трех жестко типизированных координатах (через PHP Enums):
- Роль (Role): Кто этот человек? (Технолог, Контролер ОТК, Финдир, Директор).
- Раздел (Section): К какой части системы он обращается? (Финансы, Склад, Производство, Справочники).
- Уровень доступа (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 непонятными кнопками. В его боковом меню есть только одна вкладка: «Заказы на проверку качества». Система ведет его за руку, не давая совершить ошибку в незнакомом разделе.