Проверьте доступ пользователя с помощью строки промежуточного программного обеспечения

У меня есть строка с правилом промежуточного программного обеспечения (как в маршрутах):

$middleware = "can:index,App\Models\Order";

Есть ли возможность проверить, имеет ли данный пользователь доступ с этим правилом промежуточного программного обеспечения?

0

Решение

Вот как политики Laravel определяют правила авторизации в промежуточном программном обеспечении. Посмотреть здесь: https://laravel.com/docs/5.5/authorization#via-middleware

Создайте класс политики для модели, которую вы авторизуете, затем зарегистрируйте политику для моделирования.

0

Другие решения

Можно увидеть, уполномочен ли данный пользователь выполнять определенное действие различными способами. Одним из них является использование промежуточного программного обеспечения в вашем вопросе и присоединение его к маршруту или группе. Вот несколько других способов:

С использованием can метод на User объект. can Метод наследуется от Authorizable черта (так что это не ограничивается только пользователями):

if ($user->can('index', 'App\Models\Order')) {
// User is allowed to index orders.
}

С использованием authorize метод на контроллере. authorize Метод наследуется от AuthorizesRequests черта (так что это не ограничивается только контроллером). Этот метод выдает исключение, если авторизация не удалась:

$this->authorize('index', 'App\Models\Order');

В представлении можно использовать @can Директива Blade, чтобы увидеть, авторизован ли пользователь для выполнения данного действия:

@can('index', 'App\Models\Order')
This user can index orders.
@endcan

Если у вас есть эта конкретная строка, вы можете сделать небольшую манипуляцию, чтобы извлечь нужные биты, а затем передать ее одному из приведенных выше методов:

$middleware = "can:index,App\Models\Order";
list($rule, $parameters) = explode(':', $middleware);
list($ability, $model) = explode(',', $parameters);

if ($user->can($ability, $model)) {
// User can index orders.
}

Конечно, было бы разумно сделать больше проверки ошибок и т. Д.

0

По вопросам рекламы [email protected]