Em um aplicativo Web moderno, controlar quem pode acessar ou modificar recursos é crucial. Por exemplo, em um aplicativo de blog, você pode querer garantir que apenas o proprietário de uma postagem possa editá-la ou excluí-la. O Laravel oferece duas maneiras elegantes de lidar com autorização: Gates e Policy Classes. Este guia orientará você pelos dois métodos, mostrando como proteger seus recursos e garantir a segurança de seu aplicativo.
Gates fornecem uma maneira rápida e direta de lidar com autorização usando encerramentos. Eles são perfeitos para verificações de autorização simples e são definidos no AuthServiceProvider.
Vamos definir um portão para garantir que apenas o proprietário da postagem possa atualizar ou excluir uma postagem:
Definir o portão: Abra AuthServiceProvider e adicione suas definições de portão:
// 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; }); }
Aplicando o Gate: Use o gate nos métodos do seu controlador para impor a lógica de autorização:
// 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 }
Prós:
Contras:
Melhor caso de uso: aplicativos pequenos ou casos de uso simples onde é necessária uma verificação rápida de autorização. ?
As classes de políticas oferecem uma abordagem mais estruturada e escalonável para lidar com autorizações. Eles fornecem uma maneira clara de gerenciar regras de autorização complexas e manter seu código organizado. As políticas são particularmente úteis ao trabalhar com controladores de recursos que incluem as operações CRUD padrão: index, create, edit, update e destruir.
Gerar a política: Crie uma classe de política usando Artisan:
php artisan make:policy PostPolicy
Definir métodos de política: Abra a classe de política gerada e adicione métodos para lidar com a autorização para cada ação:
// 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; } }
Usando a política: aplique os métodos de política nas ações do 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 }
Prós:
Contras:
Melhor cenário: Ideal para aplicativos com requisitos de autorização complexos ou quando se busca um código limpo e de fácil manutenção. ?
Tanto Gates quanto classes de política no Laravel oferecem maneiras poderosas de lidar com autorização. Gates são excelentes para verificações rápidas e simples, enquanto Policy Classes fornecem uma abordagem estruturada para gerenciar cenários complexos, especialmente em controladores de recursos com métodos como index, create, edit, atualizar e destruir. Escolha o método que melhor se adapta às necessidades da sua aplicação e desfrute de uma base de código segura e bem organizada! ??
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3