"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Autorização no Laravel - um guia para iniciantes

Autorização no Laravel - um guia para iniciantes

Publicado em 2024-11-07
Navegar:476

Authorization In Laravel - A Beginner

Dominando a autorização no Laravel: Gates vs. classes de políticas ??

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.

Portões em Laravel?

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.

Configurando um portão

Vamos definir um portão para garantir que apenas o proprietário da postagem possa atualizar ou excluir uma postagem:

  1. 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;
        });
    }
    
  2. 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 e contras de portões

Prós:

  • Simplicidade: Configuração rápida com código mínimo. ⚡
  • Ideal para Simplicidade: Perfeito para aplicativos de recurso único ou cenários simples. ?

Contras:

  • Escalabilidade: pode se tornar complicado e difícil de gerenciar à medida que seu aplicativo cresce. ?
  • Manutenção: Pode ficar confuso se não for bem organizado. ?

Melhor caso de uso: aplicativos pequenos ou casos de uso simples onde é necessária uma verificação rápida de autorização. ?

Aulas de política no Laravel ?️

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.

Criando e usando uma política

  1. Gerar a política: Crie uma classe de política usando Artisan:

    php artisan make:policy PostPolicy
    
  2. 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;
        }
    }
    
  3. 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 e contras das classes de políticas

Prós:

  • Organização: fornece uma maneira limpa e organizada de lidar com lógicas de autorização complexas. ?
  • Manutenção: Mais fácil de gerenciar e manter à medida que o aplicativo cresce. ?️
  • Suporte de estrutura: aproveita o suporte de estrutura integrado do Laravel para autorização consistente. ?

Contras:

  • Configuração inicial: Um pouco mais de configuração em comparação com os portões. ⚙️
  • Complexidade: pode ser um exagero para cenários de autorização muito simples. ?

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. ?


Resumo

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! ??

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/mohammed_kareem/authorization-in-laravel-a-beginners-guide-32kf?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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