get(); return view('roles.index', compact('roles')); } public function create() { $permisos = Permission::where('guard_name', 'web')->get(); $usuarios = User::all(); return view('roles.create', compact('permisos', 'usuarios')); } public function store(Request $request) { $datos = $request->validate([ 'name' => 'required|string|max:100|unique:roles,name', 'permisos' => 'nullable|array', 'permisos.*' => 'exists:permissions,id', 'usuarios' => 'nullable|array', 'usuarios.*' => 'exists:users,id', ]); $rol = new Rol(); $rol->name = $datos['name']; $rol->guard_name = 'web'; $rol->save(); // Relación muchos a muchos: Rol - Permisos $rol->permissions()->sync($request->input('permisos', [])); // Relación muchos a muchos: Rol - Usuarios $rol->usuarios()->sync($request->input('usuarios', [])); // Limpiar caché de permisos de Spatie app(PermissionRegistrar::class)->forgetCachedPermissions(); return redirect()->route('roles.index') ->with('mensaje-success', 'Rol creado correctamente'); } public function show($id) { $rol = Rol::with(['permissions', 'usuarios'])->findOrFail($id); return view('roles.show', compact('rol')); } public function edit($id) { $rol = Rol::with(['permissions', 'usuarios'])->findOrFail($id); $permisos = Permission::where('guard_name', 'web')->get(); $usuarios = User::all(); $permisosSeleccionados = $rol->permissions->pluck('id')->toArray(); $usuariosSeleccionados = $rol->usuarios->pluck('id')->toArray(); return view('roles.edit', compact( 'rol', 'permisos', 'usuarios', 'permisosSeleccionados', 'usuariosSeleccionados' )); } public function update(Request $request, $id) { $rol = Rol::findOrFail($id); $datos = $request->validate([ 'name' => [ 'required', 'string', 'max:100', Rule::unique('roles', 'name')->ignore($rol->id), ], 'permisos' => 'nullable|array', 'permisos.*' => 'exists:permissions,id', 'usuarios' => 'nullable|array', 'usuarios.*' => 'exists:users,id', ]); $rol->name = $datos['name']; $rol->save(); // Actualizar permisos del rol $rol->permissions()->sync($request->input('permisos', [])); // Actualizar usuarios del rol $rol->usuarios()->sync($request->input('usuarios', [])); // Limpiar caché de permisos de Spatie app(PermissionRegistrar::class)->forgetCachedPermissions(); return redirect()->route('roles.index') ->with('mensaje-success', 'Rol actualizado correctamente'); } public function destroy($id) { $rol = Rol::findOrFail($id); $rol->delete(); return redirect()->route('roles.index') ->with('mensaje-success', 'Rol eliminado correctamente'); } }