Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Gates и Policies в Laravel

by
Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Сегодня мы обсудим систему авторизации веб-фреймворка Laravel. Фреймворк Laravel реализует авторизацию в виде gates и политик. После введения в gates и политики я продемонстрирую концепции, реализовав собственный пример.

Я предполагаю, что вы уже знаете о встроенной системе аутентификации Laravel, поскольку это важно для понимания концепции авторизации. Очевидно, что система авторизации работает в сочетании с системой аутентификации для идентификации валидного сеанса пользователя.

Если вы не знаете систему аутентификации Laravel, я бы настоятельно рекомендовал прочесть официальную документацию, которая предоставит вам практическое понимание предмета.

Подход Laravel к авторизации

К настоящему времени вы уже должны знать, что система авторизации Laravel поставляется в двух вариантах - gates и политиках. Хотя это может показаться сложным, я бы сказал, что на самом деле все достаточно легко!

Gates позволяют вам определить правило авторизации, используя простой подход, основанный на замыканиях. Другими словами, если вы хотите разрешить действие, которое не связано с какой-либо конкретной моделью, gates являются идеальным местом для реализации этой логики.

Давайте быстро посмотрим, как выглядит авторизация на основе gates:

Вышеприведенный фрагмент определяет правило авторизации update-post, которое вы можете вызывать из любой точки приложения.

С другой стороны, вы должны использовать политики, если хотите сгруппировать логику авторизации для любой модели. Например, предположим, что у вас есть модель Post в вашем приложении, и вы хотите разрешить CRUD-действия этой модели. В этом случае это политика, которую необходимо реализовать.

Как вы можете видеть, это довольно простой класс политики, который определяет авторизацию для действий CRUD модели Post.

Итак, это было введение в gates и политики в Laravel. В следующем разделе мы продолжим практическую демонстрацию каждого элемента.

Gates

В этом разделе мы увидим реальный пример, чтобы понять концепцию gates.

Чаще всего вы в конечном итоге смотрите на поставщика услуг Laravel, когда вам необходимо зарегистрировать компонент или услугу. Следуя этому соглашению, давайте продолжим и определим наши пользовательские gates в app/Providers/AuthServiceProvider.php, как показано в следующем фрагменте.

В методе boot мы определили наш пользовательский элемент:

При определении gates они принимают замыкание, которое возвращает либо TRUE, либо FALSE на основе логики авторизации, определенной в определении gates. Помимо функции замыкания, существуют и другие способы определения gates.

Например, следующее определение gates вызывает действие контроллера вместо функции замыкания.

Теперь давайте продолжим и добавим настраиваемый маршрут, чтобы мы могли продемонстрировать, как работает авторизация на основе gates. В файле маршрутов routes/web.php добавим следующий маршрут.

Давайте создадим соответствующий контроллер app/Http/Controllers/PostController.php.

В большинстве случаев вы можете использовать метод allows или denies фасада Gate для авторизации определенного действия. В нашем примере выше мы использовали метод allow, чтобы проверить, может ли текущий пользователь выполнить действие update-post.

Наиболее внимательные читатели заметили, что мы только передали второй аргумент $post в замыкание. Первый аргумент, текущий вошедший в систему пользователь, автоматически вводится фасадом Gate.

Так вот как вы должны использовать gates для авторизации действий в вашем приложении Laravel. Следующий раздел посвящен использованию политик, если вы хотите реализовать авторизацию для своих моделей.

Политики

Как мы обсуждали ранее, когда вы хотите логически группировать свои действия авторизации для какой-либо конкретной модели или ресурса, то вам нужна политика.

В этом разделе мы создадим политику для модели Post, которая будет использоваться для авторизации всех действий CRUD. Я предполагаю, что вы уже внедрили модель Post в своем приложении; в противном случае что-то подобное будет сделано.

Команда Laravel artisan - ваш лучший друг, когда дело доходит до создания сгенерированного кода. Вы можете использовать следующую команду artisan для создания политики для модели Post.

Как вы можете видеть, мы предоставили аргумент --model=Post, чтобы он создавал все методы CRUD. В отсутствие этого он создаст пустой класс политики. Вы можете найти вновь созданный класс политики внутри файла app/Policies/ PostPolicy.php.

Давайте заменим его на следующий код.

Чтобы иметь возможность использовать наш класс Policy, нам необходимо зарегистрировать его с помощью поставщика услуг Laravel, как показано в следующем фрагменте.

Мы добавили отображение нашей политики в свойство $policy. Оно сообщает Laravel о вызове соответствующего метода политики для авторизации действия CRUD.

Вам также необходимо зарегистрировать политики, используя метод registerPolicies, как это было сделано в методе boot.

Двигаясь дальше, давайте создадим пару маршрутов в файле routes/web.php, чтобы мы могли протестировать наши методы политики.

Наконец, давайте создадим соответствующий контроллер в app/Http/Controllers/PostController.php.

Существуют различные способы авторизации ваших действий с помощью политик. В нашем примере выше мы использовали модель User для авторизации наших действий модели Post.

Модель User предоставляет два полезных метода для авторизации - can и cant. Метод can используется для проверки того, может ли текущий пользователь выполнить определенное действие. И наоборот метод cant используется для определения неспособности выполнения действия.

Давайте рассмотрим фрагмент метода view из контроллера, чтобы узнать, что именно он делает.

Во-первых, мы загружаем зарегистрированного пользователя, который дает нам объект модели пользователя. Затем мы загружаем пример сообщения с использованием модели Post.

Двигаясь вперед, мы использовали метод can модели User для авторизации действия view модели Post. Первый аргумент метода can - это имя действия, которое вы хотите разрешить, а второй аргумент - это объект модели, на который вы хотите получить разрешение.

Это была демонстрация использования модели User для авторизации действий с использованием политик. В качестве альтернативы вы также можете использовать Controller Helper, если вы находитесь в контроллере, разрешив определенное действие.

Как вы можете видеть, вам не нужно загружать модель User, если вы используете Controller Helper.

Таким образом, это была концепция политики, и она очень удобная при авторизации модели или ресурса, поскольку она позволяет группировать логику авторизации в одном месте.

Просто убедитесь, что вы не используете gates и политики в целом для тех же действий модели, иначе это создаст проблемы. Это все с моей стороны на сегодня!

Заключение

Сегодня мы изучали авторизацию Laravel, которая заняла центральное место в моей статье. В начале статьи я представил основные элементы авторизации, gates и политик Laravel.

После этого мы прошли через создание пользовательских gates и политик, чтобы увидеть, как это работает в реальном приложении. Надеюсь, вам понравилась статья и вы выучили что-то полезное в контексте Laravel.

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, создать сайт или приложение, у нас есть множество вещей, которые вы можете изучить на Envato Market.

Как всегда, я хотел бы услышать от вас в виде комментариев, используя приведенный ниже канал!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.