Модель доступа нового интерфейса
Статус: active source of truth для /new. Реализация находится в
config/access-control.php, AccessManager, EnforceBusinessAccess и
AccessRoleResource.
Принцип
Доступ складывается из двух независимых частей:
- Бизнес-возможности — что пользователь может делать: отчёты, финансы, операции, экспорт, администрирование, мониторинг и AI-ассистент.
- Маркетплейсы — с данными каких площадок пользователь может работать.
Отдельное право access.cross_marketplace.view разрешает общие страницы,
которые показывают несколько площадок одновременно. Без него общий экран
доступен только при явном и поддерживаемом MP-фильтре в URL; middleware
проверяет прямые переходы, а не только видимость меню.
Преднастроенные роли
| Роль | Назначение |
|---|---|
Владелец системы (super_admin) | Полный доступ и аварийный bypass |
Администратор (administrator) | Все бизнес-права, площадки и управление доступом |
Руководитель (admin, business_manager) | Все площадки, отчёты, финансы, операции, экспорт и Борис; без управления пользователями и системой |
Аналитик (analyst) | Все площадки, отчёты, финансы, экспорт и Борис; без операционных изменений |
Наблюдатель (panel_user, viewer) | Просмотр общих отчётов всех площадок и Борис |
Сервисный оператор (service_operator) | Операции, мониторинг и Борис; без финансов и управления пользователями |
Менеджер площадки (*_manager) | Отчёты, финансы, операции, экспорт и Борис только для одной площадки |
Без доступа (no_access) | Ни одного бизнес-права |
Доступные площадки: Wildberries, Ozon, Яндекс Маркет, Lamoda, Золотое Яблоко и Amazon.
Администрирование
- Экран
/new/access-rolesпоказывает русские названия прав, описания и отдельные флажки площадок. - Основной редактор ролей —
/new/access-roles. Технический Filament Shield доступен только пользователю сaccess.users.manageи расположен последним пунктом сервисной группы; он не является пользовательской моделью доступа. - Пользователю назначается одна роль. Предопределённые роли нельзя случайно переименовать или удалить.
- Идемпотентная синхронизация:
php artisan access:sync. - Однократная нормализация прежних двойных назначений:
php artisan access:sync --normalize-users.
--normalize-users сохраняет приоритет super_admin → admin →
panel_user; пользователям без роли назначает минимальный рабочий профиль
panel_user: дашборд, отчёты всех площадок и Борис без финансов, операций,
экспорта, управления пользователями и системных настроек. no_access остаётся
только для явной блокировки пользователя администратором.
Инварианты
- Скрытый пункт меню не является защитой: тот же запрет действует на прямой URL.
- MP-роль не должна видеть или открывать данные другой площадки.
- PageSpec-фильтры
marketplace/mpпоказывают только разрешённые площадки; URL и изменённое Livewire-state повторно проверяются перед Data API-запросом. - Неотфильтрованный cross-MP отчёт требует
access.cross_marketplace.view. - Авторизация виджета Бориса требует
access.assistant.use. - Изменение профилей сопровождается тестом
BusinessAccessTestи повторным запускомaccess:syncна целевой среде.