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 ответа

Решение

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

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

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

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

Другие вопросы по тегам