skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
182 lines • 4.99 kB
JavaScript
/**
* 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