paginate(15); return view('admin.usuarios.index', compact('users')); } /** * Mostrar formulario de creación */ public function create(): View { return view('admin.usuarios.create'); } /** * Guardar nuevo usuario admin */ public function store(AdminUserRequest $request): RedirectResponse { // Verificar permisos - solo super_admin puede crear otros admins $currentUser = Auth::guard('admin')->user(); if (! $currentUser || ! $currentUser->isSuperAdmin()) { return back()->withErrors(['error' => 'No tienes permisos para crear administradores.']); } // Si no es super_admin, no puede crear super_admin if ($request->rol === 'super_admin' && ! $currentUser->isSuperAdmin()) { return back()->withErrors(['error' => 'No tienes permisos para crear super administradores.']); } $data = $request->validated(); // Manejar upload de avatar if ($request->hasFile('avatar')) { $data['avatar'] = $this->uploadFile($request->file('avatar'), 'avatars'); } AdminUser::create($data); return redirect()->route('admin.users.index')->with('success', 'Usuario administrativo creado correctamente.'); } /** * Mostrar formulario de edición */ public function edit(AdminUser $admin_user): \Illuminate\Contracts\View\View|RedirectResponse { $user = Auth::guard('admin')->user(); // Solo super_admin puede editar otros usuarios // Un usuario puede editar su propio perfil if (! $user->isSuperAdmin() && $user->id !== $admin_user->id) { return back()->withErrors(['error' => 'No tienes permisos para editar este usuario.']); } return view('admin.usuarios.edit', compact('admin_user')); } /** * Actualizar usuario admin */ public function update(AdminUserRequest $request, AdminUser $admin_user): RedirectResponse { // Verificar permisos $currentUser = Auth::guard('admin')->user(); // Un usuario puede editar su propio perfil, pero no cambiar su rol if ($currentUser->id === $admin_user->id) { // No permitir cambiar rol de uno mismo if ($request->has('rol') && $request->rol !== $admin_user->rol) { return back()->withErrors(['error' => 'No puedes cambiar tu propio rol.']); } } elseif (! $currentUser->isSuperAdmin()) { return back()->withErrors(['error' => 'No tienes permisos para editar este usuario.']); } // Si no es super_admin, no puede crear/asignar super_admin if ($request->rol === 'super_admin' && ! $currentUser->isSuperAdmin()) { return back()->withErrors(['error' => 'No tienes permisos para asignar rol de super administrador.']); } $data = $request->validated(); // Si no se proporciona password, eliminar del array if (empty($data['password'])) { unset($data['password']); } // Manejar upload de avatar if ($request->hasFile('avatar')) { // Eliminar avatar anterior if ($admin_user->avatar) { Storage::disk('public')->delete($admin_user->avatar); } $data['avatar'] = $this->uploadFile($request->file('avatar'), 'avatars'); } $admin_user->update($data); return redirect()->route('admin.users.index')->with('success', 'Usuario administrativo actualizado correctamente.'); } /** * Eliminar usuario admin */ public function destroy(AdminUser $admin_user): RedirectResponse { // Verificar permisos - solo super_admin puede eliminar $currentUser = Auth::guard('admin')->user(); if (! $currentUser || ! $currentUser->isSuperAdmin()) { return back()->withErrors(['error' => 'No tienes permisos para eliminar administradores.']); } // No permitir eliminarse a sí mismo if ($currentUser->id === $admin_user->id) { return back()->withErrors(['error' => 'No puedes eliminar tu propia cuenta.']); } // Eliminar avatar if ($admin_user->avatar) { Storage::disk('public')->delete($admin_user->avatar); } $admin_user->delete(); return redirect()->route('admin.users.index')->with('success', 'Usuario administrativo eliminado correctamente.'); } /** * Subir archivo a almacenamiento */ private function uploadFile($file, string $directory): string { return $file->store($directory, 'public'); } }