mirror of
https://github.com/dadosfera/maestro.git
synced 2026-08-31 19:58:21 +00:00
660 lines
17 KiB
TypeScript
660 lines
17 KiB
TypeScript
import { Logger } from '@nestjs/common';
|
|
import assert from 'assert';
|
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
|
|
|
const logger = new Logger();
|
|
|
|
export enum PermissionUsages {
|
|
PUBLIC = 'public',
|
|
INTERNAL = 'internal',
|
|
}
|
|
|
|
export interface PermissionsObjectPermission {
|
|
seqid: number;
|
|
claim: string;
|
|
usage: PermissionUsages;
|
|
name?: Record<LanguageEnum, string>;
|
|
}
|
|
export interface PermissionsObjectPermissionTranslated {
|
|
seqid: number;
|
|
claim: string;
|
|
usage: PermissionUsages;
|
|
name?: string;
|
|
}
|
|
export interface PermissionsObjectGroup {
|
|
title: {
|
|
'pt-br': string;
|
|
'en-us': string;
|
|
};
|
|
permissions: Record<string, PermissionsObjectPermission>;
|
|
}
|
|
|
|
/*
|
|
- like field numbers in gRPC, avoid to change (or reuse previously used) seqids once its deployed to DUC
|
|
- it is possible to update claim and usage, not seqid
|
|
*/
|
|
|
|
/*export const Permissions: {
|
|
[P in keyof any]: { [Q in keyof any]: Permission };
|
|
} = {*/
|
|
export const PERMISSIONS_GROUPS = {
|
|
AUTH: {
|
|
title: {
|
|
'pt-br': 'Autenticação',
|
|
'en-us': 'Authentication',
|
|
'es-es': 'Authentication',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 18,
|
|
claim: 'POST /auth',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': '',
|
|
'en-us': '',
|
|
'es-es': '',
|
|
},
|
|
},
|
|
GENERATE_TOKEN: {
|
|
seqid: 46,
|
|
claim: 'customer:generate-token',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Gerar Token de Acesso',
|
|
'en-us': 'Generate Acess Token',
|
|
'es-es': 'Gerar Token de Acceso',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
PIPELINE: {
|
|
title: {
|
|
'pt-br': 'Coletar | Pipelines',
|
|
'en-us': 'Collect | Pipelines',
|
|
'es-es': 'Colecta | Pipelines',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 23,
|
|
claim: 'POST /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Criar pipelines',
|
|
'en-us': 'Create pipelines',
|
|
'es-es': 'Crear pipelines',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 13,
|
|
claim: 'GET /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Buscar pipelines',
|
|
'en-us': 'Get pipelines',
|
|
'es-es': 'Obtener pipelines',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 29,
|
|
claim: 'PUT /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Atualizar pipeline',
|
|
'en-us': 'Update pipeline',
|
|
'es-es': 'Actualizar pipeline',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 5,
|
|
claim: 'DELETE /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Excluir pipeline',
|
|
'en-us': 'Delete pipeline',
|
|
'es-es': 'Eliminar pipeline',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CONNECTION: {
|
|
title: {
|
|
'pt-br': 'Coletar | Fontes de dados',
|
|
'en-us': 'Collect | Sources',
|
|
'es-es': 'Colecta | Sources',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 37,
|
|
claim: 'connection:create',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Cadastrar Fonte',
|
|
'en-us': 'Create Source',
|
|
'es-es': 'Crear Source',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 38,
|
|
claim: 'connection:delete',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Excluir Fonte',
|
|
'en-us': 'Remove Source',
|
|
'es-es': 'Eliminar Source',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 39,
|
|
claim: 'connection:update',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar Fonte',
|
|
'en-us': 'Edit Source',
|
|
'es-es': 'Editar Source',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
NETWORK_CONFIG: {
|
|
title: {
|
|
'pt-br': 'Coletar | Redes',
|
|
'en-us': 'Collect | Network',
|
|
'es-es': 'Colecta | Network',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 35,
|
|
claim: 'network_config:create',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Cadastrar VPN',
|
|
'en-us': 'Create VPN',
|
|
'es-es': 'Crear VPN',
|
|
},
|
|
},
|
|
// DELETE: {
|
|
// seqid: 36,
|
|
// claim: 'network_config:delete',
|
|
// usage: PermissionUsages.PUBLIC,
|
|
// name: {
|
|
// 'pt-br': 'Excluir VPN',
|
|
// 'en-us': 'Remove VPN',
|
|
// 'es-es': 'Eliminar VPN',
|
|
// },
|
|
// },
|
|
},
|
|
},
|
|
OUTPUT: {
|
|
title: {
|
|
'pt-br': 'Output',
|
|
'en-us': 'Output',
|
|
'es-es': 'Output',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 22,
|
|
claim: 'POST /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar outputs',
|
|
'en-us': 'Create outputs',
|
|
'es-es': 'Crear outputs',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 12,
|
|
claim: 'GET /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar outputs',
|
|
'en-us': 'Get outputs',
|
|
'es-es': 'Obtener outputs',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 28,
|
|
claim: 'PUT /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar outputs',
|
|
'en-us': 'Edit outputs',
|
|
'es-es': 'Editar outputs',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 4,
|
|
claim: 'DELETE /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir outputs',
|
|
'en-us': 'Remove outputs',
|
|
'es-es': 'Eliminar outputs',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
TRANSFORMATIONS: {
|
|
title: {
|
|
'pt-br': 'Micro-transformações',
|
|
'en-us': 'Micro-transformations',
|
|
'es-es': 'Micro-transformaciones',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 24,
|
|
claim: 'POST /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar micro-transformações',
|
|
'en-us': 'Create micro-transformations',
|
|
'es-es': 'Crear micro-transformaciones',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 15,
|
|
claim: 'GET /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar micro-transformações',
|
|
'en-us': 'Get micro-transformations',
|
|
'es-es': 'Obtener micro-transformaciones',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 30,
|
|
claim: 'PUT /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar micro-transformações',
|
|
'en-us': 'Edit micro-transformations',
|
|
'es-es': 'Editar micro-transformaciones',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 6,
|
|
claim: 'DELETE /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir micro-transformações',
|
|
'en-us': 'Remove micro-transformations',
|
|
'es-es': 'Eliminar micro-transformaciones',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CATALOG: {
|
|
title: {
|
|
'pt-br': 'Explorar | Catálogo',
|
|
'en-us': 'Explore | Catalog',
|
|
'es-es': 'Explorar | Catalogar',
|
|
},
|
|
permissions: {
|
|
GET: {
|
|
seqid: 7,
|
|
claim: 'GET /catalog',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar lista de Ativos e visualizar atributos',
|
|
'en-us': 'Access Assets list and its attributes',
|
|
'es-es': 'Acceda a la lista de Activos y vea los atributos',
|
|
},
|
|
},
|
|
CREATE: {
|
|
seqid: 19,
|
|
claim: 'catalog:create',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Criar Ativos',
|
|
'en-us': 'Create Assets',
|
|
'es-es': 'Crear Activos',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 25,
|
|
claim: 'catalog:edit',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Criar e editar atributos no catálogo',
|
|
'en-us': 'Create and edit attributes on the catalog',
|
|
'es-es': 'Crear y editar atributos en el catálogo',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 1,
|
|
claim: 'catalog:delete',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Excluir Ativos do catálogo',
|
|
'en-us': 'Remove Assets from the catalog',
|
|
'es-es': 'Eliminar Activos del catálogo',
|
|
},
|
|
},
|
|
DATA_MANAGER: {
|
|
seqid: 42,
|
|
claim: 'catalog:data_manager',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br':
|
|
'Gerente do catálogo. Consegue vizualizar e editar todos os ativos.',
|
|
'en-us': 'Catalog manager. Able to view and edit all assets.',
|
|
'es-es': 'Gestor de catálogos. Puede ver y editar todos los activos.',
|
|
},
|
|
},
|
|
EMBED_ANALYTICS: {
|
|
seqid: 44,
|
|
claim: 'catalog:embed',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar Módulo de Incorporação de Ativos',
|
|
'en-us': 'Access Embedding analytics Module',
|
|
'es-es': 'Acceder al Módulo de Incorporación de Activos',
|
|
},
|
|
},
|
|
TRIGGER_CATALOG_TASK: {
|
|
seqid: 45,
|
|
claim: 'catalog:trigger-task',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Executar a catalogação de um ativo',
|
|
'en-us': 'Trigger an asset cataloging',
|
|
'es-es': 'Realizar el listado de un activo',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CONNECTORS: {
|
|
title: {
|
|
'pt-br': 'Conectores',
|
|
'en-us': 'Connectors',
|
|
'es-es': 'Conectores',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 20,
|
|
claim: 'POST /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar conectores',
|
|
'en-us': 'Create connectors',
|
|
'es-es': 'Crear conectores',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 8,
|
|
claim: 'GET /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar conectores',
|
|
'en-us': 'Get connectors',
|
|
'es-es': 'Obtener conectores',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 26,
|
|
claim: 'PUT /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar conectores',
|
|
'en-us': 'Edit connectors',
|
|
'es-es': 'Editar conectores',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 2,
|
|
claim: 'DELETE /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir conectores',
|
|
'en-us': 'Remove connectors',
|
|
'es-es': 'Eliminar conectores',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
SNOWFLAKE: {
|
|
title: {
|
|
'pt-br': 'Explorar | Consolidar',
|
|
'en-us': 'Explore | Data consolidation',
|
|
'es-es': 'Explorar | Consolidación de datos',
|
|
},
|
|
permissions: {
|
|
OPEN: {
|
|
seqid: 14,
|
|
claim: 'GET /snowflake',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Snowflake',
|
|
'en-us': 'Access Snowflake',
|
|
'es-es': 'Acceso Snowflake',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
ZENDESK: {
|
|
title: {
|
|
'pt-br': 'Zendesk',
|
|
'en-us': 'Zendesk',
|
|
'es-es': 'Zendesk',
|
|
},
|
|
permissions: {
|
|
OPEN: {
|
|
seqid: 16,
|
|
claim: 'support-chat:access',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar chat de suporte',
|
|
'en-us': 'Access support chat',
|
|
'es-es': 'Acceder al chat de soporte',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
DATAVIZ: {
|
|
title: {
|
|
'pt-br': 'Analisar | Visualização',
|
|
'en-us': 'Analyze | Visualization',
|
|
'es-es': 'Analizar | Visualización',
|
|
},
|
|
permissions: {
|
|
METABASE: {
|
|
seqid: 11,
|
|
claim: 'GET /metabase',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Metabase',
|
|
'en-us': 'Access Metabase',
|
|
'es-es': 'Acceso Metabase',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
INTELLIGENCE: {
|
|
title: {
|
|
'pt-br': 'Analisar | Inteligência',
|
|
'en-us': 'Analyze | Intelligence',
|
|
'es-es': 'Analizar | Inteligencia',
|
|
},
|
|
permissions: {
|
|
INTELLIGENCE: {
|
|
seqid: 31,
|
|
claim: 'intelligence:open',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Módulo de Inteligência',
|
|
'en-us': 'Access Intelligence Module',
|
|
'es-s': 'Acceder Módulo de Inteligencia',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
MODULES: {
|
|
title: {
|
|
'pt-br': 'Módulos da Dadosfera',
|
|
'en-us': 'Dadosfera Modules',
|
|
'es-es': 'Módulos de la Dadosfera',
|
|
},
|
|
permissions: {
|
|
APP_BUILDER: {
|
|
seqid: 32,
|
|
claim: 'app-builder:open',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar App Builder',
|
|
'en-us': 'Access App Builder',
|
|
'es-es': 'Acceder App Builder',
|
|
},
|
|
},
|
|
MACHINE_LEARNING: {
|
|
seqid: 33,
|
|
claim: 'machine-learning:open',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar Machine Learning',
|
|
'en-us': 'Access Machine Learning',
|
|
'es-es': 'Acceder Machine Learning',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
USERS: {
|
|
title: {
|
|
'pt-br': 'Usuários',
|
|
'en-us': 'Users',
|
|
'es-es': 'Usuarios',
|
|
},
|
|
permissions: {
|
|
ADMIN: {
|
|
seqid: 34,
|
|
claim: 'users:admin',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Gestão de usuários e grupos',
|
|
'en-us': 'Manage user and roles',
|
|
'es-es': 'Administrar usuarios y roles',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
PROCESS: {
|
|
title: {
|
|
'pt-br': 'Processar',
|
|
'en-us': 'Process',
|
|
'es-es': 'Procesar',
|
|
},
|
|
permissions: {
|
|
TRANSFORMATION: {
|
|
seqid: 43,
|
|
claim: 'process:open',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Módulo de Transformação',
|
|
'en-us': 'Access Transformation Module',
|
|
'es-es': 'Acceder Módulo de transformación',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
DADOSFERA: {
|
|
title: {
|
|
'pt-br': 'Usuários',
|
|
'en-us': 'Users',
|
|
'es-es': 'Usuarios',
|
|
},
|
|
permissions: {
|
|
CONNECTIONS_MIGRATION: {
|
|
seqid: 40,
|
|
claim: 'dadosfera:connections-migration',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'connections-migration',
|
|
'en-us': 'connections-migration',
|
|
'es-es': 'connections-migration',
|
|
},
|
|
},
|
|
SYNC_USER: {
|
|
seqid: 41,
|
|
claim: 'dadosfera:sync-user',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'sync-user',
|
|
'en-us': 'sync-user',
|
|
'es-es': 'sync-user',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
CUSTOMER: {
|
|
title: {
|
|
'pt-br': 'Organização',
|
|
'en-us': 'Organization',
|
|
'es-es': 'Organización',
|
|
},
|
|
permissions: {
|
|
MONITORING_DASHBOARD: {
|
|
seqid: 47,
|
|
claim: 'customer:monitoring-dashboard',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Ver o dashboard de monitoramento',
|
|
'en-us': 'View the monitoring dashboard',
|
|
'es-es': 'Ver el dashboard de monitoreo',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
export interface DadosferaModule {
|
|
name: string;
|
|
description: string;
|
|
key: string;
|
|
permissionSeqId: number;
|
|
}
|
|
export const DADOSFERA_MODULES: Array<DadosferaModule> = [
|
|
{
|
|
name: 'Intelligence Module',
|
|
description: 'Orchest Module',
|
|
key: 'intelligence',
|
|
permissionSeqId:
|
|
PERMISSIONS_GROUPS.INTELLIGENCE.permissions.INTELLIGENCE.seqid,
|
|
},
|
|
{
|
|
name: 'Proccessing Module',
|
|
description: 'Proccessing Module',
|
|
key: 'process',
|
|
permissionSeqId:
|
|
PERMISSIONS_GROUPS.PROCESS.permissions.TRANSFORMATION.seqid,
|
|
},
|
|
{
|
|
name: 'Embedded Analytics',
|
|
description: 'Embedded Analytics Module',
|
|
key: 'embedded-analytics',
|
|
permissionSeqId:
|
|
PERMISSIONS_GROUPS.PROCESS.permissions.TRANSFORMATION.seqid,
|
|
},
|
|
];
|
|
// traverses the object searching for duplicate seqids or claims (executes at runtime)
|
|
let nextAvailableSeqid = 0;
|
|
const seqids = Object.values(PERMISSIONS_GROUPS).flatMap((namespace) =>
|
|
Object.values(namespace.permissions).map(({ seqid }) => seqid),
|
|
);
|
|
const claims = Object.values(PERMISSIONS_GROUPS).flatMap((namespace) =>
|
|
Object.values(namespace.permissions).map(({ claim }) => claim),
|
|
);
|
|
Object.values(PERMISSIONS_GROUPS).map((namespace) =>
|
|
Object.values(namespace.permissions).map(({ seqid, claim }) => {
|
|
const seqidsCount = seqids.filter((x) => x === seqid).length;
|
|
assert(seqidsCount === 1, `seqid ${seqid} count is not 1`);
|
|
|
|
const claimsCount = claims.filter((x) => x === claim).length;
|
|
assert(claimsCount === 1, `claim '${claim}' count is not 1`);
|
|
nextAvailableSeqid = Math.max(nextAvailableSeqid, seqid);
|
|
}),
|
|
);
|
|
|
|
DADOSFERA_MODULES.map((m) => m.key).forEach((m, i, arr) => {
|
|
if (arr.indexOf(m) !== i)
|
|
throw new Error(`DADOSFERA_MODULES[${i}] does not have a unique key`);
|
|
});
|
|
|
|
logger.log(`next available seqid ${nextAvailableSeqid + 1}`);
|