QA
Intermediate LevelLaravel

What is the difference between Gates and Policies in Laravel Authorization?

❓ Interview Prompt: Compare Closure-based Gates (Gate::define()) vs Model-based Policies (Policy classes, authorize(), @can), and Authorizable trait.

Laravel provides two main approaches to authorize user actions:

1. Gates ('Gate::define()'):

Closure-based authorization checks for actions NOT tied to a specific model (e.g. checking 'Gate::allows("view-admin-dashboard")'). Defined in 'AppServiceProvider'.

2. Policies ('PostPolicy.php'):

Classes that group authorization logic around a specific Eloquent model (e.g. 'update()', 'delete()'). Checked via '$this->authorize("update", $post)' or '@can("update", $post)'.

Code Implementation Example

php
<?php
namespace AppPolicies;

use AppModelsUser;
use AppModelsPost;

class PostPolicy
{
    public function update(User $user, Post $post): bool {
        return $user->id === $post->user_id || $user->is_admin;
    }
}
💡Model Policy class defining update authorization rule.
🎯 Interview Key Takeaway

Use Gates for general action permissions, and Policies for model-specific CRUD authorization logic.

#Authorization#Gates#Policies#Security#Intermediate
Back to all Laravel Questions→

More Laravel Interview Questions

Beginner LevelLaravel

How does the Laravel Service Container manage Dependency Injection and Bindings?

Beginner LevelLaravel

How does Routing work in Laravel including Named Routes and Route Parameters?

Beginner LevelLaravel

What is Blade Templating and how do custom directives work?