Зачем ролевая модель
Если все пользователи видят всё — это не система, это общий Excel. Ролевая модель доступа (RBAC — Role-Based Access Control) решает три задачи:
- Безопасность — рабочий не видит зарплаты руководителей.
- Юзабилити — рабочий видит только свои операции, не перегружен лишним.
- Аудит — известно, кто и что делал в системе.
Роли в MES
Рабочий
- Видит: свои операции, наряды, выработку за смену.
- Не видит: чужие операции, зарплаты коллег, отчёты цеха.
- Действия: отметить начало/конец операции, указать количество, отметить брак.
Мастер
- Видит: весь цех, всех рабочих, все заказы.
- Не видит: другие цеха (если не разрешено), зарплаты по предприятию.
- Действия: назначить операции, переназначить, закрыть наряд, посмотреть выработку.
ОТК (отдел технического контроля)
- Видит: брак по всем операциям, причины, качество.
- Не видит: зарплаты, коммерческие данные.
- Действия: отметить брак, указать причину, вернуть на доработку.
Руководитель
- Видит: отчёты, аналитику, KPI по цехам.
- Не видит: детали операций (если не нужно).
- Действия: смотреть отчёты, экспортировать, анализировать.
Администратор
- Видит: всё.
- Действия: управляет пользователями и ролями.
Роли в WMS
Кладовщик
- Видит: ячейки, остатки, задания на приёмку/отгрузку.
- Действия: приёмка, размещение, перемещение, инвентаризация.
Комплектовщик
- Видит: маршрут сборки заказа, ячейки для обхода.
- Действия: сканировать товар, подтвердить сборку.
Менеджер
- Видит: заказы, остатки, аналитику.
- Действия: создавать заказы, смотреть отчёты.
Руководитель склада
- Видит: KPI склада, оборачиваемость, точность.
- Действия: отчёты, аналитика, настройки.
Реализация
JWT-токены
При логине пользователь получает JWT-токен с ролью. Токен подписан сервером, имеет срок жизни (например, 8 часов — одна смена). Каждый API-запрос содержит токен в заголовке.
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Сервер проверяет токен, извлекает роль, проверяет права на запрошенный эндпоинт.
Проверка на каждом эндпоинте
@router.get("/api/orders") async def list_orders(user: User = Depends(get_current_user)): if user.role not in ["manager", "supervisor", "admin"]: raise HTTPException(403, "Недостаточно прав") ...
LDAP/AD-интеграция
Для корпоративных систем — единая учётная запись через LDAP/Active Directory. Пользователь не создаёт отдельный пароль для MES — использует корпоративный. Роль назначается в LDAP-группе.
Аудит-лог
Каждое действие записывается: кто, когда, что сделал, какие данные изменил. Это не для «шпионажа» — это для расследования инцидентов и соответствия требованиям.
2026-08-15 14:23:01 user=ivanov role=worker action=close_operation order=12345 qty=50 2026-08-15 14:25:10 user=petrov role=master action=reassign_operation from=ivanov to=sidorov
Итог
Ролевая модель — это не «дополнительная функция», это базовый уровень любой системы, где работают разные люди с разными обязанностями. Без RBAC система не готова к реальной эксплуатации на производстве или складе.