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');
}
но он отлично работает для клиента и не работает для администратора
2 ответа
Решение
У вас есть два варианта
- определить желаемое промежуточное ПО на соответствующих маршрутах
Route::get('/some-route', [
'uses' => 'OrdersController@create',
'as' => 'create-order',
])->middleware('auth:client');
- проверьте внутри метода, произошла ли правильная авторизация
auth('auth:client')->check()
Я предлагаю разделить контроллеры, когда доступ основан на ролях (а не на разрешениях), в противном случае (если доступ основан на разрешениях), то промежуточное ПО также должно быть основано, например, на разрешениях
$this->middleware('can:update order')->only(['update','edit']);
$this->middleware('can:store order')->only(['store','create']);