@lexstile

Как спроектировать многоролевое api на laravel 9?

Перечитал кучу статей, документацию, понятнее не стало, напротив, только усугубило ситуацию.
Как правильно организовать архитектуру многоролевого api на laravel? (guest, user, admin, owner)

Я создал 3 контроллера: UserController (extends Controller), AdminController (extends UserController), OwnerController (extends AdminController).

Как я понял, таблица в БД у меня будет одна - users, в ней будет поле role_id, в котом будет идентификатор роли, следовательно, нужно ли создавать отдельные модели?

С какими трудностями я столкнулся:
1. Как организовать структуру файла config\auth.php? (guards, providers)
spoiler
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
...
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
    ],

2. Нужно ли что-то добавлять в AuthServiceProvider в метод boot?
spoiler
public function boot()
    {
        $this->registerPolicies();

        Passport::routes();

        Passport::tokensExpireIn(now()->addMinutes(30));
        Passport::refreshTokensExpireIn(now()->addDays(30));
        # Passport::personalAccessTokensExpireIn(now()->addMonths(6));
    }

3. Нужно ли что-то еще добавлять помимо перечисленного? (Laravel & Passport)
  • Вопрос задан
  • 80 просмотров
Решения вопроса 2
vfreelancer
@vfreelancer
php
возьмите https://spatie.be/docs/laravel-permission/v5/intro... и изучите))
Ответ написан
Комментировать
pLavrenov
@pLavrenov
Разработка сайтов
0) Оставить одну модель Users
1) Не трогать
2) Не трогать
3) Нет

Используй широко распространенные пакеты и не надо ничего придумывать. Например этот
Добавляешь роли guest, user, admin а в пермиссион добавляешь разрешение owner если надо глобально или product_owner если например надо отдавать только свои продукты для роли. Далее добавляешь global scope с проверкой если есть owner то к запросу добавляешь чтобы только свои показывало.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы