No Laravel, a personalização da autenticação é uma prática comum, pois muitas aplicações web têm requisitos específicos que vão além do sistema de autenticação padrão. Neste contexto, a criação de perfis de usuário e a proteção de autenticação por perfil são tarefas importantes para segmentar e restringir o acesso a certas partes da aplicação com base nas permissões do usuário.

Vamos abordar esses tópicos passo a passo, com exemplos práticos:

  1. Personalização da Autenticação: Para personalizar a autenticação no Laravel, podemos utilizar o recurso de Autenticação de Scaffolding do framework para gerar as views e rotas necessárias e, em seguida, fazer as modificações conforme nossos requisitos.

    Para gerar o Scaffolding de Autenticação, execute o seguinte comando no terminal:

    php artisan ui bootstrap --auth
    

    O comando acima irá gerar as views e rotas para as operações de login, registro, redefinição de senha, etc. Você pode escolher outro "preset" além de "bootstrap" se preferir um estilo de front-end diferente.

  2. Criação de Perfis de Usuário: A criação de perfis de usuário pode ser feita através de uma relação entre os modelos de usuário e perfil. Vamos assumir que queremos criar um perfil de usuário comum e um perfil de administrador.

    Primeiro, crie um novo modelo chamado "Profile":

    php artisan make:model Profile -m
    

    Adicione os campos necessários à migração do perfil (como nome, descrição, etc.) e execute as migrações:

    php artisan migrate
    

    Em seguida, defina a relação entre o modelo de usuário (geralmente o modelo "User") e o modelo de perfil. No modelo "User", adicione o seguinte método:

    // app/Models/User.php
    
    public function profile()
    {
        return $this->belongsTo(Profile::class);
    }
    

    E no modelo "Profile", adicione o seguinte método:

    // app/Models/Profile.php
    
    public function users()
    {
        return $this->hasMany(User::class);
    }
    

    Agora, sempre que um usuário é criado, você pode atribuir um perfil a ele.

  3. Proteção de Autenticação por Perfil do Usuário: Para proteger rotas com base nos perfis de usuário, você pode criar um Middleware personalizado. Primeiro, crie o Middleware:

    php artisan make:middleware CheckProfile
    

    No método handle do Middleware, verifique se o perfil do usuário possui as permissões necessárias para acessar a rota desejada. Se o perfil tiver as permissões adequadas, permita o acesso. Caso contrário, redirecione ou exiba uma mensagem de erro.

    // app/Http/Middleware/CheckProfile.php
    
    public function handle($request, Closure $next, $profile)
    {
        if (auth()->user()->profile->name === $profile) {
            return $next($request);
        }
    
        abort(403, 'Acesso negado.');
    }
    
  4. Registrar o Middleware: Adicione o Middleware recém-criado ao arquivo app/Http/Kernel.php no array $routeMiddleware:

    protected $routeMiddleware = [
        // ... outros middlewares ...
        'profile' => \\\\App\\\\Http\\\\Middleware\\\\CheckProfile::class,
    ];
    
  5. Proteger Rotas com Base no Perfil: Agora, você pode aplicar o Middleware para proteger rotas específicas no arquivo routes/web.php, passando o nome do perfil como parâmetro:

    // Exemplo de proteção de rota para administradores
    Route::middleware('auth', 'profile:admin')->group(function () {
        // Rotas protegidas para administradores aqui
    });
    

    Neste exemplo, somente usuários com o perfil "admin" poderão acessar as rotas protegidas.

Lembre-se de ajustar os exemplos acima de acordo com os campos e estrutura específicos do seu banco de dados e requisitos da aplicação. Além disso, certifique-se de que o perfil do usuário esteja corretamente atribuído após o registro ou durante o processo de criação de usuários administrativos, conforme necessário.

Laravel - The PHP Framework For Web Artisans