Пример учебного пособия по Laravel Gates с нуля

Пример учебника по Laravel Gates с нуля — основная тема сегодняшнего дня. Шлюзы и политики ограничивают пользователей в зависимости от их логики. Шлюзы также могут быть определены с помощью строки обратного вызова в стиле Class @ method , как и контроллеры.

Writing Gates

Шлюзы — это замыкания, которые определяют, авторизован ли пользователь для выполнения данного действия, и обычно определяются в классе App Providers AuthServiceProvider с помощью фасада Gate. Гейтс всегда получает пользовательский экземпляр в качестве своего первого аргумента и может дополнительно получать дополнительные аргументы, такие как соответствующая модель Eloquent.

Учебное пособие по Laravel Gates

Подумайте о воротах и ​​политиках, таких как маршруты и контроллеры. Gates обеспечивает простой подход к авторизации, основанный на закрытии, в то время как политики, такие как контроллеры, группируют свою логику вокруг конкретной модели или ресурса. Сначала мы рассмотрим шлюзы, а затем изучим политики.

/** * Зарегистрируйте любые службы аутентификации/авторизации.  * * @return void */публичная функция boot () {$ this-> registerPolicies ();  Gate :: define ('update-post', 'PostPolicy @ update');} 

Теперь мы рассмотрим пример, чтобы понять Gates . Laravel по умолчанию обеспечивает миграцию пользовательской таблицы, поэтому мы сделаем еще один столбец с именем isAdmin и установим тип данных на логическое значение.

Шаг 1. Установите Laravel и настройте базу данных.

 composer create-project laravel/laravel --prefer-dist gates 

Теперь настройте базу данных в файле .env .

 DB_CONNECTION = mysqlDB_HOST = 127.0.0.1DB_PORT = 3306DB_DATABASE = gatesDB_USERNAME = rootDB_PASSWORD =  

Нам нужно изменить файл миграции пользователей и добавить еще один столбец с именем isAdmin в качестве логического.

/** * Запустить миграции.  * * @return void */public function up () {Schema :: create ('users', function (Blueprint $ table) {$ table-> increments ('id'); $ table-> string ('name')  ; $ table-> boolean ('isAdmin') -> по умолчанию (0); $ table-> string ('email') -> unique (); $ table-> string ('password'); $ table-> RememberToken  (); $ table-> timestamps ();});  } 

Теперь перенесите базу данных.

 php artisan migrate 

Шаг 2. Создайте систему аутентификации

В корневом каталоге введите в терминале следующую команду.

 php artisan make: auth 

Это создаст зарегистрируйтесь и войдите в систему для нас. Теперь зарегистрируйте трех пользователей для примера.

Теперь перейдите к таблице и измените любое значение isAdmin пользователя на 1. Это пример, поэтому мы делаем это вручную, иначе нам нужно программно изменить его на 1.

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

Теперь перейдите к resources >> views >> welcome.blade.php . Добавьте следующую строку в код.

 @if (Route :: has ('login'))  @endif 

Также определите route в файле routes >> web.php .

 Route :: get ('/privare', 'HomeController @ private') -> name ('  private '); 
/** * Показать частные ресурсы приложения. * * @return  Illuminate  Http  Response */public function private () {return view (' private ');}  

Теперь создайте файл private.blade.php .

 @extends ('layouts.app') @ sectio  n ('content') 
Личные ресурсы
Конфиденциальная информация
@endsection

Теперь войдите в приложение и перейдите на страницу

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

Шаг 3: Определите Врата.

Перейдите в файл app >> sizes >> AuthServiceProvider.php и определите шлюз.

/** * Зарегистрируйте любые службы аутентификации/авторизации.  * * @return void */публичная функция boot () {$ this-> registerPolicies ();  Gate :: define ('только для администратора', функция ($ user) {if ($ user-> isAdmin == 1) {return true;} return false;});  } 

Хорошо, теперь оставшийся шаг — сообщить приложению, что этот маршрут защищен от администратора.

Итак, в HomeController напишите следующий код.

 use Illuminate  Support  Facades  Gate; /** * Показать частные ресурсы приложения. * * @return  Illuminate  Http  Response */public function private () {if (Gate :: allowed ('admin-only', auth () -> user ())) {return view ('private');  } return 'Вы не админ !!!!';  } 

Итак, когда вы вошли в систему как пользователь, чей isAdmin является одним из них, вы можете просматривать частные ресурсы, в противном случае — нет. Следующий шаг — не показывать частный элемент навигации пользователю, не являющемуся администратором, потому что нет смысла показывать им секретную часть.

В welcome.blade. php , вы можете добавить директиву @can .

 @if (Route :: has ('login')) 
@auth Home @can ('admin-only', auth () -> user ()) Private @endcan @else Войти Зарегистрируйтесь @endauth
@endif

Теперь только администратор может видеть Частный вид приложения. Поэтому мы использовали Gate в качестве авторизованного пользователя, чтобы отображать только те ресурсы, которым был разрешен этот пользователь. Есть еще одна концепция, называемая Policy, которую мы увидим в следующем руководстве. Вы можете изучить больше API в документации Laravel.

Это все для учебного примера Laravel Gates с нуля.

Оцените статью
nanomode.ru
Добавить комментарий