En una aplicación web moderna, controlar quién puede acceder o modificar los recursos es crucial. Por ejemplo, en una aplicación de blog, es posible que desee asegurarse de que solo el propietario de una publicación pueda editarla o eliminarla. Laravel ofrece dos formas elegantes de manejar la autorización: Puertas y Clases de políticas. Esta guía lo guiará a través de ambos métodos y le mostrará cómo proteger sus recursos y garantizar la seguridad de su aplicación.
Las puertas proporcionan una manera rápida y sencilla de manejar la autorización mediante cierres. Son perfectos para comprobaciones de autorización simples y están definidos en AuthServiceProvider.
Definamos una puerta para garantizar que solo el propietario de la publicación pueda actualizar o eliminar una publicación:
Defina la puerta: abra AuthServiceProvider y agregue las definiciones de su puerta:
// app/Providers/AuthServiceProvider.php use Illuminate\Support\Facades\Gate; use App\Models\Post; public function boot() { $this->registerPolicies(); Gate::define('update-post', function ($user, Post $post) { return $user->id === $post->user_id; }); Gate::define('delete-post', function ($user, Post $post) { return $user->id === $post->user_id; }); }
Aplicación de la puerta: use la puerta en los métodos de su controlador para hacer cumplir la lógica de autorización:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use App\Models\Post; public function update(Request $request, Post $post) { if (Gate::denies('update-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with updating the post } public function destroy(Post $post) { if (Gate::denies('delete-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with deleting the post }
Ventajas:
Contras:
Mejor caso de uso: aplicaciones pequeñas o casos de uso simples donde se necesita una verificación de autorización rápida. ?
Las clases de políticas ofrecen un enfoque más estructurado y escalable para manejar la autorización. Proporcionan una forma clara de gestionar reglas de autorización complejas y mantener su código organizado. Las políticas son particularmente útiles cuando se trabaja con controladores de recursos que incluyen las operaciones CRUD estándar: index, create, edit, update y destruir.
Generar la política: Crear una clase de política usando Artisan:
php artisan make:policy PostPolicy
Definir métodos de política: abra la clase de política generada y agregue métodos para manejar la autorización para cada acción:
// app/Policies/PostPolicy.php namespace App\Policies; use App\Models\User; use App\Models\Post; class PostPolicy { /** * Determine if the user can view the list of posts. * * @param User $user * @return bool */ public function viewAny(User $user) { // Example logic to allow viewing posts for authenticated users return true; } /** * Determine if the user can create a post. * * @param User $user * @return bool */ public function create(User $user) { return true; } /** * Determine if the user can update the post. * * @param User $user * @param Post $post * @return bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; } /** * Determine if the user can delete the post. * * @param User $user * @param Post $post * @return bool */ public function delete(User $user, Post $post) { return $user->id === $post->user_id; } }
Uso de la política: aplique los métodos de la política en las acciones de su controlador:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use App\Models\Post; public function update(Request $request, Post $post) { $this->authorize('update', $post); // Proceed with updating the post } public function destroy(Post $post) { $this->authorize('delete', $post); // Proceed with deleting the post }
Ventajas:
Contras:
Mejor escenario de caso: ideal para aplicaciones con requisitos de autorización complejos o cuando se busca un código limpio y fácil de mantener. ?
Tanto las puertas como las clases de políticas en Laravel ofrecen formas poderosas de manejar la autorización. Las puertas son excelentes para comprobaciones rápidas y sencillas, mientras que las clases de políticas proporcionan un enfoque estructurado para gestionar escenarios complejos, especialmente en controladores de recursos con métodos como index, create, edit, actualizar y destruir. Elija el método que mejor se adapte a las necesidades de su aplicación y disfrute de un código base seguro y bien organizado. ??
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3