Cadastro e Login com Laravel - #04 Níveis de Acesso
10/07/2021Na aula de hoje aprenderemos como estabelecer permissões e níveis de acesso de forma simplificado utilizando Laravel e Spatie.
Usando Spatie com Laravel
Para facilitar o uso de níveis de acesso no Laravel, usaremos a lib Spatie.
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan optimize:clear
php artisan migrate
app/Models/User.php
Vamos adicionar agora as permissões no model de usuário:
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasRoles;
Para criar permissões podemos usar comandos do Laravel e Spatie no terminal de comandos:
php artisan permission:create-permission "admin"
php artisan permission:create-permission "user"
app/Http/Controllers/Auth/RegisteredUserController.php
No controller de inserção de usuários, assim que criarmos um novo usuário já vamos setar a permissão para ele:
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
])->givePermissionTo('user');
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
resources/views/dashboard.blade.php
Para limitar o acesso dos usuários de acordo com a permissão podemos usar a diretiva @can:
<div class="p-6 bg-white border-b border-gray-200">
@can('user')
Dados do usuário
@elsecan('admin')
Somente o administrador pode isso
@endcan
</div>
Para testar não esqueça de rodar no terminal o comando do servidor Laravel:
php artisan serve
Sucesso nos códigos e na vida!
Precisa de aulas particulares? webdesignemfoco@gmail.com