Поиск…
Вступление
 Laravel предоставляет простой способ авторизации действий пользователя на определенных ресурсах. С помощью авторизации вы можете выборочно разрешать пользователям доступ к определенным ресурсам, не отказывая в доступе к другим. Laravel предоставляет простой API для управления авторизацией пользователей с помощью Gates and Policies . Gates предоставляет простой подход, основанный на закрытии, с использованием AuthServiceProvider то время как Policies позволяют организовывать логику авторизации вокруг моделей с использованием классов. 
Использование ворот
 Gates - это замыкания, которые определяют, разрешено ли пользователю выполнять определенное действие на ресурсе. Gates обычно определяется в методе загрузки AuthServiceProvider и лаконично назван, чтобы отразить то, что он делает. Пример шлюза, который позволяет только премиум-пользователям просматривать некоторый контент, будет выглядеть так: 
Gate::define('view-content', function ($user, $content){
    return $user->isSubscribedTo($content->id);
});
 A Gate всегда получает экземпляр пользователя в качестве первого аргумента, вам не нужно передавать его при использовании затвора и необязательно получать дополнительные аргументы, такие как вызывающая проблема красноречивая модель. 
Авторизация действий с помощью ворот
Чтобы использовать пример выше на шаблоне клинка, чтобы скрыть контент от пользователя, вы обычно делаете что-то вроде этого:
@can('view-content', $content)
 <! -- content here -->
@endcan
Чтобы полностью предотвратить навигацию по контенту, вы можете сделать следующее в своем контроллере:
if(Gate::allows('view-content', $content)){
    /* user can view the content */
}
        OR
if(Gate::denies('view-content', $content)){
    /* user cannot view content */
}
Примечание. Вам не требуется передавать текущий аутентифицированный пользователь в этот метод, Laravel позаботится об этом для вас.
полисы
 Политики - это классы, которые помогают организовать логику авторизации вокруг ресурса модели. Используя наш предыдущий пример, у нас может быть ContentPolicy который управляет доступом пользователей к модели Content . 
 Для того, чтобы ContentPolicy , Laravel обеспечивает команду мастеровых. Просто запустите 
 php artisan make:policy ContentPolicy 
 Это создаст пустой класс политики и разместит его в папке « app/Policies ». Если папка не существует, Laravel создаст ее и поместит класс внутрь. 
 После создания политики необходимо зарегистрировать, чтобы помочь Laravel узнать, какие политики использовать при авторизации действий над моделями. В AuthServiceProvider Laravel, который поставляется со всеми новыми установками Laravel, есть свойство политик, которое сопоставляет ваши красноречивые модели с их политиками авторизации. Все, что вам нужно сделать, добавить отображение в массив. 
protected $policies = [
    Content::class => ContentPolicy::class,
 ];
Написание политик
 Policies написания следуют по той же схеме, что и письмо Gates . В качестве политики можно переписать элемент разрешения контента: 
function view($user, $content)
{
    return $user->isSubscribedTo($content->id);
}
Политики могут содержать больше методов по мере необходимости, чтобы заботиться обо всех случаях авторизации для модели.
Авторизация действий с политиками
Через модель пользователя
 Модель пользователя Laravel содержит два метода, которые помогают с разрешениями с использованием Policies ; can и can't . Эти два могут использоваться, чтобы определить, имеет ли пользователь авторизацию или нет на модели, соответственно. 
Чтобы проверить, может ли пользователь просматривать содержимое или нет, вы можете сделать следующее:
if($user->can('view', $content)){
    /* user can view content */
}
        OR
if($user->cant('view', $content)){
    /* user cannot view content */
}
Через промежуточное ПО
Route::get('/contents/{id}, function(Content $content){
    /* user can view content */
})->middleware('can:view,content');
Через контроллеры
 Laravel предоставляет вспомогательный метод, называемый authorize который принимает имя политики и связанной модели в качестве аргументов и либо разрешает действие на основе вашей логики авторизации, либо отрицает действие, и выдает исключение AuthorizationException которое обработчик Laravel Exception преобразует в 403 HTTP response . 
pubic function show($id)
{
    $content = Content::find($id);
    $this->authorize('view', $content);
        
    /* user can view content */
}