Sistema d'Usuaris, Rols i Permisos
🎉 Sistema Professional Implementat
Hem implementat un sistema complet de gestió d'usuaris utilitzant Filament 3 i Spatie Laravel Permission, que proporciona autenticació, autorització, rols i permisos granulars.
Accés al Panel Admin
📦 Components del Sistema
Spatie Permission
Package professional per gestionar rols i permisos en Laravel. Proporciona un sistema flexible i escalable.
- ✅ Rols assignables
- ✅ Permisos granulars
- ✅ Multi-rol per usuari
- ✅ Cache optimitzat
Filament Admin
Framework modern per crear panels d'administració amb Laravel. Interfície elegant i funcional.
- ✅ CRUD automàtic
- ✅ Formularis reactius
- ✅ Taules amb filtres
- ✅ Dark mode integrat
Policies de Seguretat
Sistema de policies Laravel per controlar qui pot fer què en cada recurs del sistema.
- ✅ Accés controlat
- ✅ Validació automàtica
- ✅ Protecció anti auto-eliminació
- ✅ Auditoria d'accions
🛠️ Recursos Implementats
UserResource
Gestió completa d'usuaris amb avatar, rols i permisos
RoleResource
Creació i gestió de rols amb assignació de permisos
PermissionResource
Administració de permisos individuals del sistema
👥 Rols Configurats
Admin
Accés Total
68 permisos
- Gestionar usuaris, rols i permisos
- CRUD sobre totes les dades
- Exportar informes
- Configuració del sistema
Editor
Gestió de Dades
46 permisos
- Gestionar clients i productes
- Crear i editar vendes/compres
- Gestionar proveïdors i empleats
- Veure i exportar informes
Viewer
Només Lectura
7 permisos
- Veure clients i productes
- Consultar vendes i compres
- Veure proveïdors i empleats
- Accés als informes
🔑 Permisos Granulars
Sistema de 68 permisos organitzats per entitats:
Clients
Productes
Vendes
Compres
Proveïdors
Empleats
Informes
Sistema
✨ Funcionalitats Implementades
Gestió de Perfil
- Editar nom i email propis
- Pujar avatar amb editor d'imatges
- Retallador circular automàtic
- Canviar contrasenya amb validació
- Avatar al navbar i menú d'usuari
Seguretat
- Policies de Laravel implementades
- Control d'accés per recurs
- Protecció anti auto-eliminació admin
- Validació de contrasenya actual
- Cache de permisos optimitzat
Gestió d'Usuaris
- Llistat amb avatars circulars
- Filtres per rol
- Assignació multi-rol
- Permisos addicionals individuals
- Badges de color per cada rol
Navegació
- Secció "Gestió d'Usuaris" al menú
- Enllaç ràpid al frontend
- Menú d'usuari personalitzat
- Breadcrumbs automàtics
- Icones heroicons modernes
💻 Implementació Tècnica
Passos d'Implementació
1Instal·lació de Spatie Permission
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate
2Configuració del Model User
use Spatie\Permission\Traits\HasRoles;
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasAvatar;
class User extends Authenticatable implements FilamentUser, HasAvatar
{
use HasRoles;
public function canAccessPanel(Panel $panel): bool
{
return $this->hasAnyRole(['admin', 'editor', 'viewer']);
}
public function getFilamentAvatarUrl(): ?string
{
return $this->avatar
? asset('storage/' . $this->avatar)
: 'https://ui-avatars.com/api/?name=' . urlencode($this->name);
}
}
3Creació de Resources Filament
php artisan make:filament-resource User --generate
# Crear manualment: RoleResource i PermissionResource
4Implementació de Policies
php artisan make:policy UserPolicy --model=User
public function viewAny(User $user): bool
{
return $user->hasRole('admin');
}
public function delete(User $user, User $model): bool
{
return $user->hasRole('admin') && $user->id !== $model->id;
}
5Seeder amb Dades Inicials
php artisan make:seeder RolesAndPermissionsSeeder
php artisan db:seed --class=RolesAndPermissionsSeeder
📝 Exemples de Codi
Comprovar Permisos al Controlador
// Comprovar si usuari té un permís específic
if (auth()->user()->can('edit_sales')) {
// Pot editar vendes
}
// Comprovar si usuari té un rol
if (auth()->user()->hasRole('admin')) {
// És administrador
}
// Comprovar múltiples rols
if (auth()->user()->hasAnyRole(['admin', 'editor'])) {
// És admin o editor
}
// Assignar rol a un usuari
$user->assignRole('editor');
// Donar permís directe a un usuari
$user->givePermissionTo('view_reports');
Protegir Routes
// Només usuaris amb rol admin
Route::middleware(['auth', 'role:admin'])->group(function () {
Route::get('/admin/settings', [SettingsController::class, 'index']);
});
// Usuaris amb permís específic
Route::middleware(['auth', 'permission:edit_sales'])->group(function () {
Route::post('/sales', [SalesController::class, 'store']);
});
// Múltiples permisos
Route::middleware(['auth', 'permission:view_reports|export_reports'])->group(function () {
Route::get('/reports', [ReportController::class, 'index']);
});
Assignar Rols i Permisos
// Crear usuari i assignar rol
$user = User::create([
'name' => 'Joan Puig',
'email' => 'joan@example.com',
'password' => Hash::make('password'),
]);
$user->assignRole('admin');
// Crear rol amb permisos
$role = Role::create(['name' => 'comptable']);
$role->givePermissionTo(['view_sales', 'create_sales', 'view_reports']);
// Assignar permís a un rol
$adminRole = Role::findByName('admin');
$adminRole->givePermissionTo(Permission::all());
⚡ Accions Ràpides
Neteja de Cache
php artisan permission:cache-reset
php artisan optimize:clear
Crear Usuari Admin
php artisan tinker
$user = User::find(1);
$user->assignRole('admin');
🎯 Prova el Sistema Ara!
Accedeix al panel d'administració i explora totes les funcionalitats del sistema d'usuaris