id === $post->user_id; } /** Author or admin/moderator can delete */ public function delete(User $user, Post $post): bool { return $user->id === $post->user_id || $user->isAdmin() || $user->isModerator(); } /** Anyone can view public posts; followers-only requires following */ public function view(?User $user, Post $post): bool { if ($post->visibility === Post::VISIBILITY_PUBLIC) { return true; } if (! $user) { return false; } if ($user->id === $post->user_id) { return true; } if ($post->visibility === Post::VISIBILITY_FOLLOWERS) { return $post->user->isFollowedBy($user->id); } return false; } /** Only the author can report their own posts */ public function report(User $user, Post $post): bool { return $user->id !== $post->user_id; } /** Only the post owner can pin/unpin their own post */ public function pin(User $user, Post $post): bool { return $user->id === $post->user_id; } /** Any authenticated user can save a post (own or others') */ public function save(User $user, Post $post): bool { return $post->status === Post::STATUS_PUBLISHED; } /** Only post owner may highlight a comment */ public function highlightComment(User $user, Post $post): bool { return $user->id === $post->user_id; } }