Overview
The Role Management module provides a centralized interface for creating roles and assigning permissions. Built on Spatie Laravel Permission package, it offers flexible role-based access control (RBAC) for the entire application. Controller:RoleController (app/Http/Controllers/RoleController.php:13)Package:
spatie/laravel-permissionModels:
Spatie\Permission\Models\RoleSpatie\Permission\Models\Permission
resources/js/Pages/Roles.vue
Key Features
Role CRUD
Create, update, and delete roles with validation
Permission Assignment
Assign multiple permissions to each role
Sync Permissions
Easily update role permissions without manual detaching
Transaction Safety
All operations wrapped in database transactions
Spatie Laravel Permission
This module leverages the Spatie Laravel Permission package which provides:- Role-based access control (RBAC)
- Direct permission assignment to users
- Middleware for route protection
- Blade directives for view-level checks
- Cache optimization for permission queries
Documentation: Spatie Laravel Permission
Data Structure
Role Model
Roles are stored in theroles table:
id: Primary keyname: Unique role nameguard_name: Authentication guard (default: ‘sanctum’)created_at: Timestampupdated_at: Timestamp
Permission Model
Permissions are stored in thepermissions table:
id: Primary keyname: Unique permission nameguard_name: Authentication guardcreated_at: Timestampupdated_at: Timestamp
Role-Permission Relationship
Many-to-many relationship viarole_has_permissions table:
permission_id: Foreign key to permissionsrole_id: Foreign key to roles
Permissions
Role management routes require permission-based access (routes/web.php:47-63):role.index: View roles list and manage rolesrole.create: Create new rolesrole.update: Edit existing rolesrole.destroy: Delete roles
super-admin role have unrestricted access.
Middleware: role_or_permission:super-admin|role.index|role.create|role.update|role.destroy
API Endpoints
List Roles
roles: Collection of roles with eager-loaded permissionspermissions: Collection of all available permissions
Create Role
- Create new role with provided name
- Sync permissions (adds new, removes unspecified)
- Commit transaction
- Return updated roles list
Update Role
- Find role by ID
- Update role name
- Sync permissions (using
syncPermissions()method) - Commit transaction
- Return updated roles list
Delete Role
- Delete role by ID
- Cascade removes permission associations
- Commit transaction
- Return remaining roles
Warning: Deleting a role removes it from all users who were assigned that role. Ensure users are reassigned to appropriate roles before deletion.
Permission Naming Convention
Permissions follow a structured naming pattern:Examples
User Management:user.index- View users listuser.create- Create new usersuser.update- Edit usersuser.destroy- Delete usersuser.show- View user details
role.index- View rolesrole.create- Create rolesrole.update- Edit rolesrole.destroy- Delete roles
report.create- Create reportsreport.edit- Edit reportsreport.destroy- Delete reportsreport.filter.index- View filtersreport.filter.create- Create filters
ver-lista-precios- View price lists
rutas-tecnicas.ver- View routesrutas-tecnicas.crear- Create routesrutas-tecnicas.editar- Edit routesrutas-tecnicas.eliminar- Delete routesrutas-tecnicas.ver-todos- View all routes (supervisor)
super-admin- Full system accessupdate-reports- Update user report assignmentsupdate-filters- Update user report filtersset-default- Set dashboard defaultsimport-report- Import Power BI reports
Common Roles
Typical roles configured in the system:Super Admin
Permissions: AllDescription: Full system access, bypasses all permission checks
Gerencia (Management)
Permissions:- All user management
- All report management
- View all technical routes
- Role and permission management
AsistenteVentas (Sales Assistant)
Permissions:- View/create/edit technical routes
- View all routes
- Report viewing
- User management (limited)
Asesor (Advisor)
Permissions:- Create/view/edit own technical routes
- View price lists
- View assigned reports
Tecnico (Technician)
Permissions:- View technical routes assigned to them
- View price lists
- Limited report access
Vendedor (Salesperson)
Permissions:- View price lists
- View assigned reports
- Create design requests
Permission Checks in Code
Controller Level
Using middleware in routes:User Model
Using Spatie trait methods:Blade Views
Using directives:Vue Components
Access via user prop:Transaction Safety
All role operations use database transactions:- Ensures data consistency
- Prevents partial updates
- Automatically rolls back on errors
User Interface
The roles management interface provides:Roles Table
- Columns: Role Name, Permission Count, Actions
- Actions: Edit, Delete
- Create Button: Opens modal for new role
Role Form (Create/Edit)
- Role Name: Text input (required, unique)
- Permissions: Multi-select checkbox list
- Save Button: Submits form
- Cancel Button: Closes modal
Permission List
Grouped by module with expandable sections:- User Management
- Role Management
- Report Management
- Technical Routes
- Design Requests
- Price Lists
- Special Permissions
Cache Considerations
Spatie Laravel Permission caches role and permission data for performance:Clear Cache After Changes
Cache Keys
The package caches:- User permissions
- User roles
- Role permissions
config/permission.php
Cache is automatically cleared when roles or permissions are updated through the RoleController.
Seeding Permissions
Permissions should be seeded during initial setup:Permissions are typically created once during initial setup and rarely modified. Roles can be freely created and updated through the UI.
Usage Workflow
Define Permissions
Identify all actions in your application and create corresponding permissions via seeder.
Assign Permissions
Select all permissions that users with this role should have. Use logical groupings.
Best Practices
Least Privilege
Assign minimum permissions required for users to perform their job functions.
Descriptive Names
Use clear, consistent role names that reflect job functions (e.g., “Sales Advisor”, “Technical Support”).
Regular Audits
Periodically review role permissions and remove unnecessary access.
Document Roles
Maintain documentation of what each role represents and their intended use cases.
Related Modules
Users
Assign roles to users and manage role memberships
Route Middleware
Protect routes using role and permission middleware