Initial commit: Lash Vanshy - Complete project with admin panel, gallery, products, and contact
This commit is contained in:
156
app/Http/Controllers/Admin/AdminUserController.php
Executable file
156
app/Http/Controllers/Admin/AdminUserController.php
Executable file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\AdminUserRequest;
|
||||
use App\Models\AdminUser;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class AdminUserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Mostrar lista de usuarios admin
|
||||
*/
|
||||
public function index(): View
|
||||
{
|
||||
$users = AdminUser::orderBy('created_at', 'desc')->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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user