Policies поверх Laravel Breeze
Breeze закрыл регистрацию, вход, профиль и сброс пароля. Права на модели он за вас не напишет. Здесь пригодятся Policies из предыдущих разделов.
План такой:
-
Модель
Postсuser_id. -
PostPolicy:updateиdeleteтолько для автора. -
В контроллере -
$this->authorizeилиauthorizeResource. -
В Blade -
@canдля кнопок. -
Маршруты постов - в группе
с
auth, рядом с dashboard.
Policy для автора:
<?php
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
?>
В контроллере перед правкой:
<?php
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// ...
}
?>
В шаблоне кнопка только тому, кому можно:
@can('update', $post)
<a href="{{ route('posts.edit', $post) }}">Edit</a>
@endcan
Получится привычная схема: Breeze отвечает за «кто вошёл», ваша Policy - за «можно ли трогать этот пост».
В проекте с Breeze создайте
CRUD постов и PostPolicy.
Проверьте двумя аккаунтами: чужой пост нельзя edit/delete, свой - можно.