РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
744 of 1392 menu

Метод policy

Метод policy класса Gate применяется для регистрации политик авторизации в приложении Laravel. Политика - это класс, который содержит методы для проверки прав пользователя на выполнение определённых действий с моделью. Первым параметром передаётся имя модели, вторым - соответствующий класс политики.

Синтаксис

<?php use Illuminate\Support\Facades\Gate; Gate::policy($model, $policy); ?>

Пример

Давайте зарегистрируем политику для модели Article в сервис-провайдере:

<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use App\Models\Article; use App\Policies\ArticlePolicy; class AuthServiceProvider extends ServiceProvider { public function boot(): void { Gate::policy(Article::class, ArticlePolicy::class); } } ?>

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

Пример

Давайте создадим политику для модели Article и зарегистрируем её:

<?php namespace App\Policies; use App\Models\User; use App\Models\Article; class ArticlePolicy { public function view(User $user, Article $article): bool { return $user->id === $article->user_id; } public function update(User $user, Article $article): bool { return $user->id === $article->user_id; } } ?>
<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use App\Models\Article; use App\Policies\ArticlePolicy; class AuthServiceProvider extends ServiceProvider { public function boot(): void { Gate::policy(Article::class, ArticlePolicy::class); } } ?>

Теперь можно использовать зарегистрированную политику для проверки прав:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Gate; use App\Models\Article; use App\Models\User; class ArticleController extends Controller { public function show(int $id) { $article = Article::find($id); $user = User::find(1); if (Gate::forUser($user)->allows('view', $article)) { echo "User can view article"; } else { echo "User cannot view article"; } } } ?>

Результат выполнения кода:

"User can view article"

Пример

Давайте зарегистрируем несколько политик для разных моделей:

<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use App\Models\Article; use App\Models\Category; use App\Models\User; use App\Policies\ArticlePolicy; use App\Policies\CategoryPolicy; use App\Policies\UserPolicy; class AuthServiceProvider extends ServiceProvider { public function boot(): void { Gate::policy(Article::class, ArticlePolicy::class); Gate::policy(Category::class, CategoryPolicy::class); Gate::policy(User::class, UserPolicy::class); } } ?>

Результат выполнения кода:

"Policies registered successfully"

Смотрите также

  • метод define,
    который определяет пользовательскую способность в шлюзе
  • метод allows,
    который проверяет разрешено ли действие
  • метод denies,
    который проверяет запрещено ли действие
  • метод forUser,
    который устанавливает пользователя для проверки прав
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить