GlosarioSeguridad

¿Qué es Gate?

Los Gates en Laravel son closures que determinan si un usuario esta autorizado para realizar una accion especifica, proporcionando una forma sencilla de definir reglas de autorizacion centralizadas.

Gates

Los Gates son closures que determinan si un usuario esta autorizado para realizar una accion determinada. Son una forma simple y rapida de definir reglas de autorizacion.

Definir Gates

// En AppServiceProvider o AuthServiceProvider
use Illuminate\Support\Facades\Gate;

public function boot(): void
{
    Gate::define('update-post', function (User $user, Post $post) {
        return $user->id === $post->user_id;
    });

    Gate::define('admin', function (User $user) {
        return $user->is_admin;
    });

    // Super admin que puede todo
    Gate::before(function (User $user) {
        if ($user->isSuperAdmin()) {
            return true;
        }
    });
}

Usar Gates

// En controladores
if (Gate::allows('update-post', $post)) {
    // Autorizado
}

if (Gate::denies('update-post', $post)) {
    abort(403);
}

// Con el metodo authorize (lanza excepcion automaticamente)
Gate::authorize('update-post', $post);

// En Blade
@can('update-post', $post)
    <a href="{{ route('posts.edit', $post) }}">Editar</a>
@endcan

// En el modelo User
$user->can('update-post', $post);

Los Gates son ideales para autorizaciones simples. Para logica mas compleja asociada a modelos, es mejor usar Policies.