как я могу ограничить маршрут для поставщика, который не одобрен в laravel?

У меня есть 3 типа пользователей Admin, Vendor, Customer в моей электронной коммерции laravel.

Теперь мне нужно ограничить маршруты для тех поставщиков, которые не одобрены администратором. Подскажите, пожалуйста, процесс?

вот две таблицы пользователей и магазинов.

у пользователей есть эти атрибуты

id, name, password, email, phone

и в магазинах есть

shop_name, address, shop_phone, owner_id (this is a foreign key of users.id), is_approved(bool)
  • Здесь приведены сведения о пользователях hasOne в магазине.

Теперь мне нужно знать, как я могу ограничить все неподтвержденные маршруты авторизации is_approved==0 для магазинов.

Кто-нибудь может мне помочь, пожалуйста?


person tariqul anik    schedule 31.08.2020    source источник
comment
Вы можете определить собственное промежуточное ПО, а затем назначить его этим маршрутам, например auth. См. Это: stackoverflow.com/a/30643915/6908226   -  person iazaran    schedule 01.09.2020
comment
Включите маршруты, так как без них сложно понять, что вы пытаетесь сделать. Что будет, если у пользователя два магазина?   -  person mrhn    schedule 01.09.2020
comment
я хочу добавить промежуточное ПО в конструкцию. если возможно, что это поставщик, но пользователь () - ›магазины () -› is_activated == 0, то он вернется на страницу входа. не собираюсь дальше. как handle (). Является ли это возможным?   -  person tariqul anik    schedule 01.09.2020
comment
Да, это возможно, но нужно снова использовать аналогичный способ. Вместо этого $this->middleware('newMiddleware'); используйте это: $this->middleware(function ($request, $next) { // ... }); См. Этот раздел: laravel.com/docs/ 7.x / контроллеры # промежуточное ПО контроллера   -  person iazaran    schedule 01.09.2020


Ответы (1)


Создайте промежуточное ПО:

php artisan make:middleware CheckIsApproved

Новый класс промежуточного программного обеспечения будет создан в app/Http/Middleware/CheckIsApproved.php fille.

Затем в методе thehandle середины вы можете выполнить проверку:

public function handle ($request, Closure $next)
{
    if (auth()->user()->shop->is_approved) {
        return $next($request);
    }

    return back()->with('error', 'Unauthorized');
}

(Возможно, вам потребуется настроить условие в theif в соответствии с отношением)

В файле app/Http/Kernel.php зарегистрируйте промежуточное ПО: найдите свойство $routeMiddleware и добавьте:

protected $routeMiddleware = [
    //...
    'isApproved' => \App\Http\Middleware\CheckIsApproved::class,
];

Затем в определении маршрута вы можете указать промежуточное ПО:

Route::get('/some-route', 'SomeRouteController@show')->middleware('isApproved');

Дополнительную информацию см. В документации.

person Prince Dorcis    schedule 31.08.2020
comment
@Iagbox: Не совсем так. Здесь предполагается, что метод shop в модели User определяет взаимосвязь между моделями User и Shop. - person Prince Dorcis; 01.09.2020
comment
Ты прав. Я имею в виду auth()->user()->shop->is_approved. Я исправил ответ. - person Prince Dorcis; 01.09.2020
comment
хорошо, просто остановите следующий вопрос, являющийся какой-то ошибкой, которую они не могут решить :) Кстати, спасибо за ответ на их вопрос, всегда признателен - person lagbox; 01.09.2020
comment
Спасибо за ответ, брат. Для меня это работа. Большое спасибо. :) - person tariqul anik; 02.09.2020