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:
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.
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.
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.');
}
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,
];
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.