Skip to content
Home Tutorials Roadmaps Courses
Log in Join free
Tutorials Laravel Guards & Policies
Laravel Advanced FREE

Guards & Policies

Lesson 2 of 17 Advanced Interactive

Guards authenticate; Policies authorize.

Policies

php artisan make:policy PostPolicy --model=Post

Syntax

LARAVEL
class PostPolicy {
    public function update(User $user, Post $post) {
        return $user->id === $post->user_id;
    }
    public function delete(User $user, Post $post) {
        return $user->id === $post->user_id || $user->role === "admin";
    }
}

Gate::define("admin", fn($user) => $user->role === "admin");
Guards and Policies
PHP
<?php
// config/auth.php (custom student guard)
"guards" => [
    "student" => [
        "driver" => "session",
        "provider" => "students",
    ],
],

// app/Models/Post.php
use Illuminate\Foundation\Auth\Access\Authorizable;

// app/Policies/PostPolicy.php
class PostPolicy
{
    public function update(User $user, Post $post)
    {
        return $user->id === $post->user_id;
    }

    public function delete(User $user, Post $post)
    {
        return $user->id === $post->user_id
            || $user->is_admin;
    }
}

// Usage in controller
$this->authorize("update", $post);
if ($user->can("delete", $post)) {
    // allowed
}

Practice

1
Exercise

Create a policy allowing only owners to edit posts.

Answer
class PostPolicy {
    public function update(User $user, Post $post) {
        return $user->id === $post->user_id;
    }
}

Quick Quiz

1

What does $this->authorize() do on failure?

Throws AuthorizationException (403).

Interview Questions

Middleware controls route access (auth). Policies control authorization on specific model actions.