У меня есть строка с правилом промежуточного программного обеспечения (как в маршрутах):
$middleware = "can:index,App\Models\Order";
Есть ли возможность проверить, имеет ли данный пользователь доступ с этим правилом промежуточного программного обеспечения?
Вот как политики Laravel определяют правила авторизации в промежуточном программном обеспечении. Посмотреть здесь: https://laravel.com/docs/5.5/authorization#via-middleware
Создайте класс политики для модели, которую вы авторизуете, затем зарегистрируйте политику для моделирования.
Можно увидеть, уполномочен ли данный пользователь выполнять определенное действие различными способами. Одним из них является использование промежуточного программного обеспечения в вашем вопросе и присоединение его к маршруту или группе. Вот несколько других способов:
С использованием 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.
}
Конечно, было бы разумно сделать больше проверки ошибок и т. Д.