validate([ 'email' => 'required|email', 'password' => 'required', ]); $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { throw ValidationException::withMessages([ 'email' => ['Las credenciales proporcionadas son incorrectas.'], ]); } $token = $user->createToken('auth-token')->plainTextToken; return response()->json([ 'user' => $user->load('cliente'), 'token' => $token, ]); } public function logout(Request $request): JsonResponse { $request->user()->currentAccessToken()->delete(); return response()->json(['message' => 'Sesión cerrada exitosamente']); } public function user(Request $request): JsonResponse { return response()->json($request->user()->load('cliente')); } public function register(Request $request): JsonResponse { // Solo admin puede registrar usuarios if (!$request->user()->isAdmin()) { return response()->json(['message' => 'No autorizado'], 403); } $validated = $request->validate([ 'nombre' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8', 'role' => 'required|in:admin,analista,cliente,empleado', 'cliente_id' => 'nullable|exists:clientes,id', ]); $user = User::create([ 'nombre' => $validated['nombre'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), 'role' => $validated['role'], 'cliente_id' => $validated['cliente_id'] ?? null, ]); return response()->json($user, 201); } }