За замовчуванням гейти й політики для неавтентифікованого відвідувача повертають false - навіть не викликаючи метод. Це безпечний дефолт: забута перевірка не відкриє дію гостям.
Щоб метод викликався й для гостя, параметр користувача роблять необов'язковим:
class PostPolicy
{
public function view(?User $user, Post $post): bool
{
if ($post->is_published) {
return true; // опубліковане бачать усі
}
return $user?->id === $post->user_id; // чернетку - лише автор
}
}
Де це потрібно: публічний вміст із винятками - опубліковані статті для всіх, чернетки для автора; файли, частина яких доступна без входу.
Пастка: код усередині має пам'ятати про null - звернення $user->id без ?-> впаде на гостеві.
Для дій, які гостям не дозволені ніколи (редагування, видалення), параметр лишають обов'язковим - тоді Laravel відмовить ще до виклику методу.