Laravel 5.8 Несколько промежуточных программ, использующих защиту и специальные параметры для каждой защиты

У меня есть приложение laravel, которое позволяет как администраторам, так и клиентам получать к нему доступ, и для каждого из них будут определенные разрешения с использованием 2 отдельных таблиц для каждого типа пользователя для аутентификации и 2 разных охранников. сейчас мне нужно предоставить клиентам доступ к определенным методам внутри контроллера, а администратору иметь доступ ко всем методам.

class OrdersController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth:client'])->only(['index', 'create', 'store', 'edit', 'printOrder']);
        $this->middleware('auth:admin');
    }

но он отлично работает для клиента и не работает для администратора


person Y. Afnisse    schedule 05.03.2020    source источник
comment
Это так не работает. Вы можете определить промежуточное ПО на маршрутах.   -  person Gordon Freeman    schedule 05.03.2020


Ответы (2)


У вас есть два варианта

  1. определить желаемое промежуточное ПО на соответствующих маршрутах
Route::get('/some-route', [
    'uses' => 'OrdersController@create',
    'as' => 'create-order',
])->middleware('auth:client');
  1. проверить внутри метода, правильно ли прошла авторизация auth('auth:client')->check()
person Gordon Freeman    schedule 05.03.2020

Я предлагаю разделить контроллеры, когда доступ основан на ролях (не разрешениях), в противном случае (если доступ основан на разрешениях) тогда промежуточное программное обеспечение также должно быть основано на разрешениях, например.

$this->middleware('can:update order')->only(['update','edit']);
$this->middleware('can:store order')->only(['store','create']);

person Anas Bakro    schedule 05.03.2020