Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/amarcano568/pensionalamedida/llms.txt

Use this file to discover all available pages before exploring further.

Pensión a la Medida delega toda la gestión de permisos y roles en el paquete Spatie Laravel Permission. Cada módulo funcional del panel está protegido por un permiso con nombre, que se verifica a través del middleware permission de Spatie en los grupos de rutas definidos en routes/web.php. El modelo App\User incorpora el trait HasRoles, lo que permite asignar roles, verificar permisos y aplicar scopes directamente sobre cualquier instancia de usuario autenticado.
Todas las rutas de routes/web.php están envueltas en el grupo ['middleware' => 'auth']. El middleware de permisos (permission:nombre_permiso) se aplica como segunda capa, dentro de ese grupo. Por tanto, un usuario debe estar autenticado y poseer el permiso requerido para acceder a la ruta protegida.

Permisos disponibles

Los cuatro permisos activos en el sistema corresponden a los módulos principales del panel de administración. Cada uno protege la ruta GET de entrada al módulo; las rutas POST de operaciones CRUD dentro del mismo módulo no llevan middleware de permiso propio (confían en que el usuario ya superó la verificación de acceso al módulo).
Nombre del permisoRuta protegidaDescripción
gestion_alumnosGET /gestionar-estudiantesAcceso al módulo de gestión de estudiantes
gestion_grupos_familiaresGET /gestionar-grupos-familiaresAcceso al módulo de grupos familiares
gestion_residenciaGET /gestion-residenciaAcceso al módulo de residencia y habitaciones
gestion_rolesGET /gestion-rolesAcceso al módulo de administración de roles

Asignar permisos a un rol

Usa Artisan Tinker o un seeder para crear roles y asociarles permisos. El siguiente ejemplo crea un rol Gestor con acceso a los módulos de alumnos y residencia:
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$role = Role::create(['name' => 'Gestor']);
$role->givePermissionTo('gestion_alumnos');
$role->givePermissionTo('gestion_residencia');
También puedes pasar un array para asignar múltiples permisos en una sola llamada:
$role->givePermissionTo([
    'gestion_alumnos',
    'gestion_grupos_familiares',
    'gestion_residencia',
    'gestion_roles',
]);

Asignar rol a un usuario

Una vez que el rol existe en la base de datos, asígnalo a un usuario con assignRole():
$user = App\User::find(1);
$user->assignRole('Administrator');
Para sustituir el rol de un usuario (eliminar el actual y asignar uno nuevo), el modelo App\Usuario::Guardar() ya implementa este patrón internamente:
$roles = $usuario->getRoleNames();
$usuario->removeRole($roles[0]);
$usuario->assignRole($request->rol);

Verificar permisos en el código

En un controlador

Usa el helper can() sobre el usuario autenticado para proteger lógica condicional:
if (auth()->user()->can('gestion_alumnos')) {
    // El usuario tiene permiso para gestionar alumnos
}
También puedes usar la directiva authorize() de Laravel, que lanza una excepción AuthorizationException si el permiso no está presente:
$this->authorize('gestion_alumnos');

En una vista Blade

Usa la directiva @can para mostrar u ocultar elementos de la interfaz según el permiso del usuario autenticado:
@can('gestion_alumnos')
    <a href="/gestionar-estudiantes">Gestionar Alumnos</a>
@endcan

@can('gestion_grupos_familiares')
    <a href="/gestionar-grupos-familiares">Grupos Familiares</a>
@endcan

@can('gestion_residencia')
    <a href="/gestion-residencia">Residencia</a>
@endcan

@can('gestion_roles')
    <a href="/gestion-roles">Administrar Roles</a>
@endcan

Middleware de rutas

En routes/web.php, los módulos protegidos agrupan sus rutas de entrada en un Route::group que declara el middleware permission de Spatie. La sintaxis es:
Route::group(['middleware' => ['permission:nombre_permiso']], function () {
    Route::get('ruta-del-modulo', 'Controlador@metodo')->name('...');
});
Ejemplos reales del proyecto:
// Módulo de alumnos
Route::group(['middleware' => ['permission:gestion_alumnos']], function () {
    Route::get('gestionar-estudiantes', 'AlumnosController@gestionarEstudiantes')
        ->name('gestion-estudiantes.gestionarEstudiantes');
});

// Módulo de grupos familiares
Route::group(['middleware' => ['permission:gestion_grupos_familiares']], function () {
    Route::get('gestionar-grupos-familiares', 'GruposFamiliaresController@gestionarGrupoFamiliar')
        ->name('gestion-grupos-familiares.gestionarGrupoFamiliar');
});

// Módulo de residencia
Route::group(['middleware' => ['permission:gestion_residencia']], function () {
    Route::get('gestion-residencia', 'ResidenciaController@gestionResidencia')
        ->name('gestion-residencia.gestionResidencia');
});

// Módulo de roles
Route::group(['middleware' => ['permission:gestion_roles']], function () {
    Route::get('gestion-roles', 'MantenimientoRolesController@gestionRoles')
        ->name('gestion-roles.gestionRoles');
});
Cuando un usuario autenticado intenta acceder a una de estas rutas sin el permiso necesario, Spatie lanza una excepción Spatie\Permission\Exceptions\UnauthorizedException (HTTP 403).

Limpiar caché de permisos

Spatie Laravel Permission almacena en caché los permisos y roles para mejorar el rendimiento. Después de cualquier modificación en roles o permisos (alta, baja, asignación), limpia la caché con:
php artisan permission:cache-reset
Este comando es especialmente importante en entornos de producción donde se hayan realizado cambios mediante seeders o Tinker sin reiniciar la aplicación.
El modelo App\Roles en app/Roles.php es un wrapper ligero sobre la tabla roles de Spatie. Se usa únicamente en las vistas de administración del módulo gestion_roles para listar los roles disponibles. Para cualquier operación de creación, edición o asignación de permisos, usa directamente Spatie\Permission\Models\Role, que ofrece todos los métodos del paquete (givePermissionTo, revokePermissionTo, syncPermissions, etc.).

Build docs developers (and LLMs) love