Skip to content

Permisos de Usuarios

Endpoints para consultar y gestionar los permisos de usuarios en el sistema.

  • GET /api/v1/users/my-permissions - Obtener mis permisos
  • GET /api/v1/users/me/my-permission - Obtener mi información de permisos

Obtiene la lista completa de permisos del usuario autenticado.

  • Método: GET
  • Endpoint: /api/v1/users/my-permissions
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Usuario autenticado
  • Caché: Los permisos se cachean por 15 minutos
Accept: application/json
Authorization: Bearer {token}
Terminal window
GET /api/v1/users/my-permissions
{
"message": "Permisos del usuario",
"status": "OK",
"payload": {
"user_id": 123456789,
"role": {
"id": 2,
"name": "Administrador",
"description": "Administrador del sistema"
},
"permissions": [
{
"id": 1,
"name": "create_documents",
"display_name": "Crear Documentos",
"description": "Permite crear documentos SRI",
"category": "documents"
},
{
"id": 2,
"name": "view_reports",
"display_name": "Ver Reportes",
"description": "Permite visualizar reportes del sistema",
"category": "reports"
},
{
"id": 3,
"name": "manage_users",
"display_name": "Gestionar Usuarios",
"description": "Permite crear, editar y eliminar usuarios",
"category": "users"
},
{
"id": 4,
"name": "view_analytics",
"display_name": "Ver Analíticas",
"description": "Permite acceder a analíticas avanzadas",
"category": "analytics"
}
],
"permission_groups": {
"documents": [
"create_documents",
"edit_documents",
"delete_documents",
"view_documents"
],
"users": [
"manage_users",
"view_users"
],
"reports": [
"view_reports",
"export_reports"
],
"analytics": [
"view_analytics"
]
},
"restrictions": {
"max_documents_per_month": 1000,
"can_access_api": true,
"can_export_data": true,
"allowed_document_types": ["01", "04", "05", "06", "07"]
},
"expires_at": null,
"last_updated": "2025-01-17 10:30:00"
}
}
{
"message": "Permisos del usuario",
"status": "OK",
"payload": {
"user_id": 987654321,
"role": {
"id": 1,
"name": "Usuario Básico",
"description": "Usuario con permisos básicos"
},
"permissions": [
{
"id": 1,
"name": "create_documents",
"display_name": "Crear Documentos",
"description": "Permite crear documentos SRI",
"category": "documents"
},
{
"id": 5,
"name": "view_own_documents",
"display_name": "Ver Mis Documentos",
"description": "Permite ver solo sus propios documentos",
"category": "documents"
}
],
"permission_groups": {
"documents": [
"create_documents",
"view_own_documents"
]
},
"restrictions": {
"max_documents_per_month": 100,
"can_access_api": true,
"can_export_data": false,
"allowed_document_types": ["01", "04"]
},
"expires_at": null,
"last_updated": "2025-01-17 10:30:00"
}
}

Obtiene información detallada sobre los permisos y el contexto del usuario autenticado.

  • Método: GET
  • Endpoint: /api/v1/users/me/my-permission
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Usuario autenticado
  • Información adicional: Incluye contexto de empresa y gestión
Accept: application/json
Authorization: Bearer {token}
Terminal window
GET /api/v1/users/me/my-permission
{
"message": "Información de permisos del usuario",
"status": "OK",
"payload": {
"user": {
"uuid": 123456789,
"name": "Juan",
"last_name": "Pérez",
"email": "[email protected]",
"status": "active"
},
"company": {
"uuid": 987654321,
"name": "Empresa Ejemplo S.A.",
"ruc": "0123456789001",
"address": "Av. Principal 123, Quito",
"status": "active",
"plan": "premium"
},
"management": {
"uuid": 555666777,
"role": {
"id": 2,
"name": "Administrador",
"level": "admin"
},
"permissions": [
"create_documents",
"view_reports",
"manage_users",
"view_analytics",
"export_data",
"access_api"
],
"department": "Contabilidad",
"position": "Contador General",
"hire_date": "2024-01-15",
"supervisor_id": null,
"is_supervisor": true,
"team_members": [
{
"uuid": 111222333,
"name": "María González",
"position": "Asistente Contable"
}
]
},
"access_control": {
"allowed_ips": ["192.168.1.0/24", "10.0.0.0/8"],
"allowed_hours": {
"start": "08:00",
"end": "18:00",
"timezone": "America/Guayaquil"
},
"two_factor_enabled": true,
"session_timeout": 480,
"max_concurrent_sessions": 3
},
"quotas": {
"documents": {
"monthly_limit": 1000,
"current_usage": 245,
"remaining": 755,
"reset_date": "2025-02-01"
},
"api_calls": {
"daily_limit": 10000,
"current_usage": 1250,
"remaining": 8750,
"reset_date": "2025-01-18"
},
"storage": {
"limit_gb": 50,
"used_gb": 12.5,
"remaining_gb": 37.5
}
},
"features": {
"advanced_reports": true,
"bulk_operations": true,
"api_access": true,
"white_label": false,
"priority_support": true,
"custom_integrations": true
},
"last_login": "2025-01-17 09:15:00",
"permissions_updated_at": "2025-01-15 14:30:00"
}
}
Terminal window
# Obtener mis permisos
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users/my-permissions" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
# Obtener información detallada de permisos
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users/me/my-permission" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
  • create_documents - Crear documentos SRI
  • edit_documents - Editar documentos
  • delete_documents - Eliminar documentos
  • view_documents - Ver documentos
  • view_own_documents - Ver solo mis documentos
  • approve_documents - Aprobar documentos
  • send_documents - Enviar documentos al SRI
  • manage_users - Gestionar usuarios
  • view_users - Ver usuarios
  • create_users - Crear usuarios
  • edit_users - Editar usuarios
  • delete_users - Eliminar usuarios
  • assign_roles - Asignar roles
  • view_reports - Ver reportes
  • create_reports - Crear reportes
  • export_reports - Exportar reportes
  • schedule_reports - Programar reportes
  • share_reports - Compartir reportes
  • view_analytics - Ver analíticas
  • advanced_analytics - Analíticas avanzadas
  • real_time_analytics - Analíticas en tiempo real
  • custom_dashboards - Dashboards personalizados
  • admin_panel - Panel de administración
  • system_settings - Configuraciones del sistema
  • backup_restore - Backup y restauración
  • audit_logs - Logs de auditoría
  • api_management - Gestión de API
  • manage_company - Gestionar empresa
  • view_company_data - Ver datos de empresa
  • edit_company_settings - Editar configuraciones
  • manage_billing - Gestionar facturación
  • Acceso completo al sistema
  • Gestión de múltiples empresas
  • Configuraciones globales
  • Sin restricciones de cuota
  • Gestión completa de su empresa
  • Todos los permisos de documentos
  • Gestión de usuarios de su empresa
  • Reportes y analíticas avanzadas
  • Creación y gestión de documentos
  • Reportes contables
  • Consulta de información fiscal
  • Limitaciones según plan
  • Creación de documentos básicos
  • Consulta de sus propios documentos
  • Reportes básicos
  • Cuotas limitadas
  • Solo consulta de información
  • Sin permisos de creación
  • Reportes de solo lectura
  • Acceso limitado
// Verificar límite de documentos
const checkDocumentLimit = async () => {
const info = await getMyDetailedPermissions();
const quota = info.quotas.documents;
if (quota.current_usage >= quota.monthly_limit) {
throw new Error('Límite mensual de documentos alcanzado');
}
const remaining = quota.monthly_limit - quota.current_usage;
console.log(`Documentos restantes este mes: ${remaining}`);
return remaining;
};
// Verificar límite de API
function checkApiLimit($token) {
$info = getMyDetailedPermissions($token);
$quota = $info['quotas']['api_calls'];
if ($quota['current_usage'] >= $quota['daily_limit']) {
throw new Exception('Límite diario de llamadas API alcanzado');
}
$remaining = $quota['daily_limit'] - $quota['current_usage'];
echo "Llamadas API restantes hoy: {$remaining}\n";
return $remaining;
}
// Verificar acceso por IP
const checkIPAccess = async (clientIP) => {
const info = await getMyDetailedPermissions();
const allowedIPs = info.access_control.allowed_ips;
const isAllowed = allowedIPs.some(range => {
// Verificar si la IP está en el rango permitido
return isIPInRange(clientIP, range);
});
if (!isAllowed) {
throw new Error('Acceso denegado desde esta IP');
}
return true;
};
// Verificar horario de acceso
function checkAccessHours($token) {
$info = getMyDetailedPermissions($token);
$accessControl = $info['access_control'];
$timezone = new DateTimeZone($accessControl['allowed_hours']['timezone']);
$now = new DateTime('now', $timezone);
$currentTime = $now->format('H:i');
$startTime = $accessControl['allowed_hours']['start'];
$endTime = $accessControl['allowed_hours']['end'];
if ($currentTime < $startTime || $currentTime > $endTime) {
throw new Exception('Acceso fuera del horario permitido');
}
return true;
}
CódigoDescripciónAcción
200Permisos obtenidos exitosamenteProcesar información
401Token inválidoRenovar autenticación
403Sin permisosVerificar acceso
429Límite de cuota excedidoEsperar o actualizar plan
500Error del servidorReintentar más tarde
// Implementar cache inteligente
class PermissionCache {
constructor(ttl = 15 * 60 * 1000) { // 15 minutos
this.cache = new Map();
this.ttl = ttl;
}
set(key, value) {
this.cache.set(key, {
value,
timestamp: Date.now()
});
}
get(key) {
const item = this.cache.get(key);
if (!item) return null;
if (Date.now() - item.timestamp > this.ttl) {
this.cache.delete(key);
return null;
}
return item.value;
}
clear() {
this.cache.clear();
}
}
// Verificar permisos en tiempo real
const createPermissionChecker = (token) => {
const cache = new PermissionCache();
return {
async can(permission) {
const cached = cache.get('permissions');
if (cached) {
return cached.permissions.some(p => p.name === permission);
}
const permissions = await getMyPermissions();
cache.set('permissions', permissions);
return permissions.permissions.some(p => p.name === permission);
},
invalidate() {
cache.clear();
}
};
};
// Middleware para verificar permisos
class PermissionMiddleware {
public function handle($request, $next, $permission) {
$token = $request->bearerToken();
if (!$this->hasPermission($permission, $token)) {
return response()->json([
'message' => 'Sin permisos suficientes',
'required_permission' => $permission
], 403);
}
return $next($request);
}
private function hasPermission($permission, $token) {
// Verificar permiso usando la API
return hasPermission($permission, $token);
}
}
// Crear dashboard basado en permisos
const createDynamicDashboard = async () => {
const permissions = await getMyPermissions();
const features = await getMyDetailedPermissions();
const dashboardItems = [];
// Agregar elementos según permisos
if (permissions.permissions.some(p => p.name === 'create_documents')) {
dashboardItems.push({
title: 'Crear Documentos',
icon: 'document-plus',
route: '/documents/create'
});
}
if (permissions.permissions.some(p => p.name === 'view_reports')) {
dashboardItems.push({
title: 'Reportes',
icon: 'chart-bar',
route: '/reports'
});
}
if (features.features.advanced_reports) {
dashboardItems.push({
title: 'Reportes Avanzados',
icon: 'chart-line',
route: '/reports/advanced'
});
}
return dashboardItems;
};
// Validar campos según permisos
const validateFormFields = async (formData) => {
const permissions = await getMyPermissions();
const userPermissions = permissions.permissions.map(p => p.name);
const validatedData = { ...formData };
// Solo administradores pueden cambiar el estado
if (!userPermissions.includes('manage_users') && validatedData.status) {
delete validatedData.status;
}
// Solo supervisores pueden asignar roles
if (!userPermissions.includes('assign_roles') && validatedData.role_id) {
delete validatedData.role_id;
}
return validatedData;
};
// Generar menú basado en permisos
function generateContextualMenu($token) {
$permissions = getMyPermissions($token);
$userPermissions = array_column($permissions['permissions'], 'name');
$menu = [];
// Menú de documentos
if (in_array('view_documents', $userPermissions)) {
$documentsMenu = ['title' => 'Documentos', 'items' => []];
if (in_array('create_documents', $userPermissions)) {
$documentsMenu['items'][] = ['title' => 'Crear', 'route' => '/documents/create'];
}
if (in_array('view_documents', $userPermissions)) {
$documentsMenu['items'][] = ['title' => 'Listar', 'route' => '/documents'];
}
$menu[] = $documentsMenu;
}
// Menú de usuarios (solo administradores)
if (in_array('manage_users', $userPermissions)) {
$menu[] = [
'title' => 'Usuarios',
'items' => [
['title' => 'Listar', 'route' => '/users'],
['title' => 'Crear', 'route' => '/users/create']
]
];
}
return $menu;
}
  • 🔐 Seguridad: Los permisos se verifican en cada solicitud
  • Cache: Implementar cache para mejorar rendimiento
  • 🔄 Tiempo real: Los permisos se actualizan en tiempo real
  • 📊 Cuotas: Respetar límites de cuota según el plan
  • 🎯 Granularidad: Permisos granulares para control preciso
  • 🚫 Restricciones: Verificar restricciones de IP y horario
  • 📱 Responsive: Adaptar interfaz según permisos
  • 🔍 Auditoría: Registrar accesos y cambios de permisos
  • 💼 Contexto: Considerar contexto empresarial
  • 🔗 Jerarquía: Respetar jerarquía de roles y permisos