Skip to content

Crear Usuarios

Endpoint para crear nuevos usuarios en el sistema con roles y permisos específicos.

  • Método: POST
  • Endpoint: /api/v1/users/create
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Administrador o usuario con permisos de gestión
  • Tipo de contenido: application/json
Content-Type: application/json
Accept: application/json
Authorization: Bearer {token}
ParámetroTipoRequeridoDescripción
namestringNombre del usuario
lastnamestringApellido del usuario
emailstringEmail del usuario (debe ser único)
passwordstringContraseña del usuario (mínimo 8 caracteres)
account_idintegerID de la cuenta a la que pertenece
rolesarrayNoArray de roles del usuario
accountsarrayNoArray de cuentas asociadas
  • Email: Debe ser único en el sistema
  • Contraseña: Mínimo 8 caracteres
  • Account ID: Debe existir en el sistema
  • Roles: Deben ser roles válidos existentes
{
"name": "Juan",
"lastname": "Pérez",
"email": "[email protected]",
"password": "contraseña123",
"account_id": 1,
"roles": ["user"],
"accounts": [1, 2]
}
{
"message": "Usuario creado exitosamente",
"status": "OK",
"payload": {
"uuid": 123456789,
"name": "Juan",
"lastname": "Pérez",
"email": "[email protected]",
"account_id": 1,
"status": "active",
"created_at": "2025-01-17 10:30:00"
}
}
{
"name": "María",
"lastname": "González",
"email": "[email protected]",
"password": "AdminPass2024!",
"account_id": 1,
"roles": ["admin", "manager"],
"accounts": [1, 2, 3]
}
{
"message": "Usuario creado exitosamente",
"status": "OK",
"payload": {
"uuid": 987654321,
"name": "María",
"lastname": "González",
"email": "[email protected]",
"account_id": 1,
"status": "active",
"roles": [
{
"id": 1,
"name": "admin",
"description": "Administrador del sistema"
},
{
"id": 2,
"name": "manager",
"description": "Gerente de cuenta"
}
],
"created_at": "2025-01-17 10:30:00"
}
}
Terminal window
curl -X POST "https://dev-facturacion.e-dinky.test/api/v1/users/create" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}" \
-d '{
"name": "Juan",
"lastname": "Pérez",
"email": "[email protected]",
"password": "contraseña123",
"account_id": 1,
"roles": ["user"],
"accounts": [1, 2]
}'
RolDescripciónPermisos Típicos
adminAdministrador del sistemaAcceso completo a todas las funciones
managerGerente de cuentaGestión de usuarios y documentos
userUsuario estándarCreación y consulta de documentos
viewerSolo lecturaConsulta de documentos y reportes
accountantContadorGestión contable y reportes
CódigoDescripciónAcción
201Usuario creado exitosamenteContinuar con el flujo
400Datos inválidosRevisar formato de datos
401Token inválidoRenovar autenticación
403Sin permisosVerificar permisos de usuario
404Email ya existeUsar email diferente
422Error de validaciónCorregir datos según errores
500Error del servidorReintentar más tarde
{
"message": "El email ya está registrado",
"status": "ERROR"
}

Solución: Usar un email diferente o verificar si el usuario ya existe.

{
"message": "Los datos proporcionados no son válidos",
"errors": {
"email": [
"El campo email es obligatorio"
],
"password": [
"La contraseña debe tener al menos 8 caracteres"
],
"account_id": [
"La cuenta especificada no existe"
]
}
}

Soluciones:

  • Verificar que todos los campos requeridos estén presentes
  • Asegurar que la contraseña tenga al menos 8 caracteres
  • Confirmar que el account_id existe en el sistema
  • Validar formato del email
{
"message": "No tienes permisos para realizar esta acción",
"status": "ERROR"
}

Solución: Verificar que el usuario autenticado tenga permisos de administrador o gestión de usuarios.

// Validar email antes de enviar
const validateEmail = (email) => {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
};
// Validar contraseña
const validatePassword = (password) => {
return password.length >= 8 &&
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/[0-9]/.test(password);
};
// Manejar diferentes tipos de errores
try {
$response = Http::post($url, $data);
if ($response->status() === 404) {
// Email ya existe
return ['error' => 'Email ya registrado'];
}
if ($response->status() === 422) {
// Errores de validación
$errors = $response->json()['errors'];
return ['validation_errors' => $errors];
}
return $response->json();
} catch (Exception $e) {
Log::error('Error creando usuario: ' . $e->getMessage());
throw $e;
}
// Asignar roles según el tipo de usuario
const assignRolesByUserType = (userType) => {
const roleMapping = {
'admin': ['admin', 'manager', 'user'],
'manager': ['manager', 'user'],
'employee': ['user'],
'viewer': ['viewer']
};
return roleMapping[userType] || ['user'];
};
// Generar contraseña temporal segura
function generateSecurePassword($length = 12) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*';
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $characters[random_int(0, strlen($characters) - 1)];
}
return $password;
}
  1. Validar permisos del usuario autenticado

    • Verificar que tenga rol de administrador
    • Confirmar permisos de gestión de usuarios
  2. Validar datos de entrada

    • Verificar formato de email
    • Validar fortaleza de contraseña
    • Confirmar existencia de account_id
  3. Verificar unicidad del email

    • Consultar si el email ya existe
    • Manejar caso de email duplicado
  4. Crear usuario

    • Enviar solicitud POST
    • Manejar respuesta y errores
  5. Procesar resultado

    • Notificar al nuevo usuario
    • Registrar en logs de auditoría
    • Actualizar interfaz de usuario
  • Contraseñas: Nunca almacenar contraseñas en texto plano
  • Tokens: Usar tokens con tiempo de expiración
  • Permisos: Verificar permisos antes de cada operación
  • Auditoría: Registrar todas las creaciones de usuarios
  • Validación: Validar todos los datos de entrada
  • Rate Limiting: Implementar límites de velocidad
{
"name": "Admin",
"lastname": "Empresa",
"email": "[email protected]",
"password": "TempPass2024!",
"account_id": 123,
"roles": ["admin"],
"accounts": [123]
}
{
"name": "Carlos",
"lastname": "Empleado",
"email": "[email protected]",
"password": "EmpleadoPass123",
"account_id": 123,
"roles": ["user"],
"accounts": [123]
}
{
"name": "Ana",
"lastname": "Contadora",
"email": "[email protected]",
"password": "ContadorPass456",
"account_id": 123,
"roles": ["accountant", "user"],
"accounts": [123, 124]
}
  • 👤 Usuario único: Cada email debe ser único en el sistema
  • 🔐 Seguridad: Las contraseñas se encriptan automáticamente
  • 📧 Notificaciones: El usuario recibe email de bienvenida
  • 🏢 Cuentas múltiples: Un usuario puede pertenecer a varias cuentas
  • 🎭 Roles múltiples: Un usuario puede tener varios roles
  • Activación: Los usuarios se crean en estado activo por defecto
  • 📊 Auditoría: Todas las creaciones se registran en logs
  • 🔄 Estados: Los usuarios pueden estar activos, inactivos o suspendidos
  • 🚫 Eliminación: Los usuarios no se eliminan, se desactivan
  • 📱 API: Endpoint disponible para integraciones externas