Суть не этом.
Ты говоришь про привязку запчасти к машине. Оно логично. Сам бы так делал по умолчанию.
Но тут типа ларка и я начитался всякого про политики, про то, что создаются для каждого типа материала какие-то то ли провайдеры тотли ещё что для контроллеров. Где уже роли расписывают. Кто что может делать.
В процессах разобраться действительно нужно, возможно все еще проще. По Вашим словам у меня вот такое есть видение.
Нужно сделать:
- таблицу пользователей
- таблицу ролей пользователя
- таблицу машин
- таблицу запчастей
- таблицу доков
- таблицу отношения машин к пользователю
- таблицу отношения запчасти к машине
- таблицу отношения машины к докам (и/или вдруг нужно к запчастям)
По простому можно в таблице с пользователями сделать поле role_id в котором int представление ролей.
Создаем группу роутов /user.
Создаем middleware для проверки авторизации пользователя НЕ админской роли и вешаем на группу роутов /user (возможно избыточно, хотя можно расширять именно в сторону пользователей и ролей не трогая админов).
Создаем роут для списка пользовательских машин, например, /user/car/list.
Создаем контроллер для работы с пользовательскими машинами - UserCarController - в методе (функции) list() будем получать данные из service'a, вешаем его на роут /user/car/list по правилам ларавеля.
В контроллере получаем из сессии информацию об user_id и передаем в метод list() service'a для получения списка машин пользователя.
Создаем service "список машин пользователя" UserCarList с методом list(), в котором получаем список машин пользователя по user_id из нужного репозитория.
Создаем роут /user/car/{car_id}/view.
И т.д.
Для работы админа:
Создаем middleware для проверки авторизации пользователя админской роли и вешаем на группу роутов /admin.
Создаем роут для списка пользовательских машин, например, /admin/car/list.
Создаем контроллер для работы с пользовательскими машинами AdminCarController - в методе (функции) list() будем получать данные из service'a, вешаем его на нужный роут по правилам ларавеля.
Создаем сервис AdminUserCarList в котором получаем список машин пользователей по нужным критериям.
Что это нам дает?
Разделяя роуты, контроллеры, сервисы на user и admin:
- можем перенести нагруженную часть на отдельный сервер без гимора;
- контролировать доступ через мидлвару для каждой части, например для админов можно повесить вход через 2FA;
- обезопасть от кривых рук себя путем создания для каждого роута своих контроллеров и сервисом с нужными методами, тогда не паримся с наследованием - больше радости от безопасности;
В ларавели много лишнего, как по мне, и удобнее все-таки было бы использовать ADR для такого проекта.