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

Метод restore

Метод restore класса Policy применяется для проверки права пользователя на восстановление мягко удаленной модели. Первым параметром передается текущий аутентифицированный пользователь, вторым - экземпляр модели, которую планируется восстановить. Метод должен возвращать true, если пользователь имеет право на восстановление, и false в противном случае.

Синтаксис

<?php class PostPolicy { public function restore(User $user, Post $post): bool { // Logic for restoring soft-deleted model } } ?>

Пример

Давайте создадим политику для модели Post, которая разрешает восстановление только автору записи:

<?php namespace AppPolicies; use AppModelsUser; use AppModelsPost; class PostPolicy { public function restore(User $user, Post $post): bool { return $user->id === $post->user_id; } } ?>

Теперь зарегистрируем политику в сервис-провайдере:

<?php namespace AppProviders; use AppModelsPost; use AppPoliciesPostPolicy; use IlluminateSupportServiceProvider; class AuthServiceProvider extends ServiceProvider { protected $policies = [ Post::class => PostPolicy::class, ]; public function boot(): void { $this->registerPolicies(); } } ?>

Пример

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

<?php namespace AppHttpControllers; use AppModelsPost; use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; class PostController extends Controller { public function restore(Request $request, $id) { $post = Post::withTrashed()->find($id); if ($post && Auth::user()->can('restore', $post)) { $post->restore(); $res = "Post restored successfully"; } else { $res = "You do not have permission to restore this post"; } echo $res; } } ?>

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

"Post restored successfully"

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

"You do not have permission to restore this post"

Пример

Создадим более сложную политику, которая разрешает восстановление только если прошло менее 30 дней с момента удаления:

<?php namespace AppPolicies; use AppModelsUser; use AppModelsPost; use CarbonCarbon; class PostPolicy { public function restore(User $user, Post $post): bool { if ($user->id !== $post->user_id) { return false; } $daysSinceDeleted = Carbon::parse($post->deleted_at)->diffInDays(now()); return $daysSinceDeleted <= 30; } } ?>

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

  • метод delete,
    который проверяет право на удаление модели
  • метод forceDelete,
    который проверяет право на полное удаление модели
  • метод update,
    который проверяет право на обновление модели
  • метод authorize,
    который используется для авторизации действий в контроллерах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить