UNPKG

skailan-core

Version:

Servicio de autenticación y multitenancy para Skailan.

182 lines 4.99 kB
/** * Configuración por defecto del sistema RBAC */ export const defaultRBACConfig = { enableCache: true, cacheTTL: 300, // 5 minutos enableAudit: true, defaultPermissions: [ "users:read", "users:update", "organizations:read", "organizations:update", "memberships:read", "memberships:create", "memberships:update", "memberships:delete", "payments:read", "payments:create", "invitations:read", "invitations:create", "invitations:delete", "permissions:read", "permissions:manage", "settings:read", "settings:update", "reports:read", "reports:export", "analytics:read", "analytics:export" ], roleHierarchy: { OWNER: ['ADMIN', 'MEMBER', 'GUEST'], ADMIN: ['MEMBER', 'GUEST'], MEMBER: ['GUEST'], GUEST: [] } }; /** * Configuración para desarrollo */ export const developmentRBACConfig = { ...defaultRBACConfig, enableCache: false, // Deshabilitar cache en desarrollo para debugging enableAudit: true, cacheTTL: 60 // 1 minuto en desarrollo }; /** * Configuración para producción */ export const productionRBACConfig = { ...defaultRBACConfig, enableCache: true, enableAudit: true, cacheTTL: 600 // 10 minutos en producción }; /** * Configuración para testing */ export const testingRBACConfig = { ...defaultRBACConfig, enableCache: false, enableAudit: false, cacheTTL: 30 // 30 segundos en testing }; /** * Obtener configuración según el entorno */ export function getRBACConfig(environment = process.env.NODE_ENV || 'development') { switch (environment) { case 'production': return productionRBACConfig; case 'testing': case 'test': return testingRBACConfig; case 'development': default: return developmentRBACConfig; } } /** * Validar configuración RBAC */ export function validateRBACConfig(config) { const errors = []; if (config.cacheTTL <= 0) { errors.push("cacheTTL debe ser mayor a 0"); } if (config.cacheTTL > 3600) { errors.push("cacheTTL no debe exceder 1 hora (3600 segundos)"); } if (!config.roleHierarchy || Object.keys(config.roleHierarchy).length === 0) { errors.push("roleHierarchy es requerido"); } // Validar que todos los roles en la jerarquía sean válidos const validRoles = ['OWNER', 'ADMIN', 'MEMBER', 'GUEST']; for (const [role, subordinates] of Object.entries(config.roleHierarchy)) { if (!validRoles.includes(role)) { errors.push(`Rol inválido en jerarquía: ${role}`); } for (const subordinate of subordinates) { if (!validRoles.includes(subordinate)) { errors.push(`Rol subordinado inválido: ${subordinate}`); } } } return { isValid: errors.length === 0, errors }; } /** * Configuración de permisos por defecto para cada rol */ export const defaultRolePermissions = { OWNER: [ "users:read", "users:update", "users:delete", "organizations:read", "organizations:update", "organizations:delete", "memberships:read", "memberships:create", "memberships:update", "memberships:delete", "payments:read", "payments:create", "payments:update", "payments:delete", "invitations:read", "invitations:create", "invitations:delete", "permissions:read", "permissions:manage", "settings:read", "settings:update", "reports:read", "reports:export", "analytics:read", "analytics:export" ], ADMIN: [ "users:read", "users:update", "organizations:read", "organizations:update", "memberships:read", "memberships:create", "memberships:update", "payments:read", "payments:create", "invitations:read", "invitations:create", "invitations:delete", "permissions:read", "settings:read", "settings:update", "reports:read", "reports:export", "analytics:read" ], MEMBER: [ "users:read", "organizations:read", "memberships:read", "payments:read", "invitations:read", "settings:read", "reports:read" ], GUEST: [ "organizations:read", "settings:read" ] }; /** * Configuración de recursos y acciones disponibles */ export const availableResources = [ "users", "organizations", "memberships", "payments", "subscriptions", "invitations", "permissions", "roles", "settings", "reports", "analytics" ]; export const availableActions = [ "create", "read", "update", "delete", "list", "approve", "reject", "invite", "remove", "manage", "view", "export", "import" ]; //# sourceMappingURL=rbacConfig.js.map