0Pricing
PHP Academy · Урок

Gates: простые проверки авторизации

Определяйте и проверяйте gates для логики разрешений действий пользователей

«Gates: простые проверки авторизации» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Что такое шлюзы?

Шлюзы Laravel — это замыкания, которые определяют, имеет ли пользователь право выполнить определённое действие. Это простые глобальные проверки авторизации, не связанные с конкретной моделью.

Определение шлюза

Определяйте шлюзы в App\Providers\AppServiceProvider или в отдельном AuthServiceProvider с помощью фасада Gate.

<?php
use Illuminate\Support\Facades\Gate;

// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
    return $user->id === $post->user_id;
});

Проверка шлюза (разрешение или запрет)

Проверяйте результаты работы шлюза с помощью Gate::allows() или Gate::denies().

<?php
if (Gate::allows("delete-post", $post)) {
    $post->delete();
}

if (Gate::denies("delete-post", $post)) {
    abort(403);
}

Авторизация в контроллерах

Вызовите $this->authorize() внутри контроллера — при неудаче он автоматически выбрасывает AuthorizationException (403).

<?php
public function destroy(Post $post): RedirectResponse
{
    $this->authorize("delete-post", $post);
    $post->delete();
    return redirect()->route("posts.index");
}

@can в Blade

Используйте директиву @can, чтобы условно отображать элементы пользовательского интерфейса на основе проверок шлюза.

@can('delete-post', $post)
    <form method="POST" action="/posts/{{ $post->id }}">
        @csrf @method('DELETE')
        <button>Delete</button>
    </form>
@endcan

Проверка до остальных у шлюза

Обратный вызов before выполняется до всех остальных проверок шлюза — это удобно для предоставления администраторам полного доступа.

<?php
Gate::before(function (User $user, string $ability) {
    if ($user->isAdmin()) return true; // skip further checks
});

Проверка после остальных у шлюза

after выполняется после всех проверок шлюза. Возвращаемое значение, отличное от null, переопределяет результат шлюза.

Возврат ответов

Шлюзы могут возвращать объект Response с пользовательскими сообщениями об ошибках.

<?php
Gate::define("publish-post", function (User $user, Post $post) {
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("You must be an editor to publish.");
});

forUser()

Проверьте шлюз для другого пользователя, а не для аутентифицированного.

<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
    // ...
}

Гостевые пользователи

По умолчанию шлюзы автоматически возвращают false для неаутентифицированных пользователей. Укажите для пользователя допускающий значение null тип, чтобы разрешить проверки для гостей.

<?php
Gate::define("view-post", function (?User $user, Post $post) {
    return $post->is_published || $user?->id === $post->user_id;
});

Шлюзы и политики

Шлюзы — это простые замыкания для разовых проверок. Политики — это классы для авторизации на основе модели; используйте политики, когда у вас несколько действий над одной моделью.

Итоги

Шлюзы — это глобальные замыкания для авторизации. Определяйте их в поставщике служб. Проверяйте их с помощью Gate::allows(), $this->authorize() или @can в Blade.

Быстрая проверка

Какой метод контроллера автоматически выбрасывает 403 при сбое проверки шлюза?

Часто задаваемые вопросы

Урок «Gates: простые проверки авторизации» бесплатный?

Да — полный текст урока «Gates: простые проверки авторизации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Gates: простые проверки авторизации»?

Определяйте и проверяйте gates для логики разрешений действий пользователей Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Gates: простые проверки авторизации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Аутентификация с Laravel Breeze
  2. Защита маршрутов с помощью промежуточного ПО
  3. Gates: простые проверки авторизации
  4. Политики: авторизация на основе моделей
← Назад к PHP Academy