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

Метод update

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

Синтаксис

<?php namespace AppPolicies; use AppModelsUser; use AppModelsModel; class ModelPolicy { public function update(User $user, Model $model) { return $user->id === $model->user_id; } } ?>

Пример

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

<?php namespace AppPolicies; use AppModelsUser; use AppModelsArticle; class ArticlePolicy { public function update(User $user, Article $article) { return $user->id === $article->user_id; } } ?>

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

<?php namespace AppProviders; use AppModelsArticle; use AppPoliciesArticlePolicy; use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { protected $policies = [ Article::class => ArticlePolicy::class, ]; public function boot() { $this->registerPolicies(); } } ?>

Пример

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

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; class ArticleController extends Controller { public function update(Request $request, Article $article) { $this->authorize('update', $article); $article->update($request->all()); return redirect()->route('articles.index'); } } ?>

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

Redirect to /articles

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

IlluminateAuthAccessAuthorizationException This action is unauthorized.

Пример

Давайте проверим права на обновление с помощью метода can у модели пользователя во вьюхе Blade:

@auth @if (Auth::user()->can('update', $article)) <a href="{{ route('articles.edit', $article) }}">Edit Article</a> @endif @endauth

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

<a href="/articles/1/edit">Edit Article</a>

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

(пусто)

Пример

Давайте создадим более сложный метод update, который проверяет не только владельца, но и статус статьи:

<?php namespace AppPolicies; use AppModelsUser; use AppModelsArticle; class ArticlePolicy { public function update(User $user, Article $article) { if ($article->status === 'published') { return false; } return $user->id === $article->user_id; } } ?>

Теперь проверим работу метода в контроллере:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; class ArticleController extends Controller { public function update(Request $request, Article $article) { if (Auth::user()->cannot('update', $article)) { abort(403, 'You cannot update this article.'); } $article->update($request->all()); return redirect()->route('articles.index'); } } ?>

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

"403 You cannot update this article."

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

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