0Pricing
PHP Academy · Lección

Gates: comprobaciones sencillas de autorización

Defina y evalúe gates para gestionar los permisos de acciones de los usuarios.

Gates: comprobaciones sencillas de autorización es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué son los Gates?

Los Gates de Laravel son cierres que determinan si un usuario está autorizado para realizar una acción determinada. Son comprobaciones de autorización globales y sencillas que no están vinculadas a un modelo específico.

Definir un Gate

Defina los gates en App\Providers\AppServiceProvider o en un AuthServiceProvider específico mediante la fachada Gate.

<?php
use Illuminate\Support\Facades\Gate;

// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
    return $user->id === $post->user_id;
});

Comprobar un Gate (permite o deniega)

Compruebe los resultados de un gate con Gate::allows() o Gate::denies().

<?php
if (Gate::allows("delete-post", $post)) {
    $post->delete();
}

if (Gate::denies("delete-post", $post)) {
    abort(403);
}

authorize() en controladores

Llame a $this->authorize() dentro de un controlador; en caso de error, lanza automáticamente AuthorizationException (403).

<?php
public function destroy(Post $post): RedirectResponse
{
    $this->authorize("delete-post", $post);
    $post->delete();
    return redirect()->route("posts.index");
}

@can en Blade

Use la directiva @can para mostrar condicionalmente la interfaz según las comprobaciones de los gates.

@can('delete-post', $post)
    <form method="POST" action="/posts/{{ $post->id }}">
        @csrf @method('DELETE')
        <button>Delete</button>
    </form>
@endcan

Gate::before

La devolución de llamada before se ejecuta antes que todas las demás comprobaciones de gates; resulta útil para conceder acceso total a los administradores.

<?php
Gate::before(function (User $user, string $ability) {
    if ($user->isAdmin()) return true; // skip further checks
});

Gate::after

after se ejecuta después de todas las comprobaciones de gates. Un valor de retorno distinto de null sobrescribe el resultado del gate.

Devolver respuestas

Los gates pueden devolver un objeto Response para mostrar mensajes de error personalizados.

<?php
Gate::define("publish-post", function (User $user, Post $post) {
    return $user->isEditor()
        ? Response::allow()
        : Response::deny("You must be an editor to publish.");
});

forUser()

Compruebe un gate para otro usuario distinto del autenticado.

<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
    // ...
}

Usuarios invitados

De forma predeterminada, los gates devuelven automáticamente false para los usuarios no autenticados. Declare el tipo del usuario como nullable para permitir comprobaciones de invitados.

<?php
Gate::define("view-post", function (?User $user, Post $post) {
    return $post->is_published || $user?->id === $post->user_id;
});

Gates frente a Policies

Los gates son cierres sencillos para comprobaciones puntuales. Las policies son clases para la autorización basada en modelos; utilice policies cuando tenga varias acciones sobre el mismo modelo.

Resumen

Los gates son cierres globales de autorización. Defínalos en un proveedor de servicios. Compruébelos con Gate::allows(), $this->authorize() o @can en Blade.

Comprobación rápida

¿Qué método del controlador lanza automáticamente un error 403 cuando falla un gate?

Preguntas frecuentes

¿La lección «Gates: comprobaciones sencillas de autorización» es gratis?

Sí — el texto completo de «Gates: comprobaciones sencillas de autorización» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Gates: comprobaciones sencillas de autorización»?

Defina y evalúe gates para gestionar los permisos de acciones de los usuarios. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar PHP Academy?

No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Gates: comprobaciones sencillas de autorización»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de PHP Academy?

Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Autenticación con Laravel Breeze
  2. Protección de rutas con middleware
  3. Gates: comprobaciones sencillas de autorización
  4. Policies: autorización basada en modelos
← Volver a PHP Academy