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; } export interface PermissionsObjectPermissionTranslated { seqid: number; claim: string; usage: PermissionUsages; name?: string; } export interface PermissionsObjectGroup { title: { 'pt-br': string; 'en-us': string; }; permissions: Record; } /* - 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', }, }, }, }, IMPORT_FILES: { title: { 'pt-br': 'Coletar | Importar arquivos', 'en-us': 'Collect | Import files', 'es-es': 'Colecta | Importar archivos', }, permissions: { VIEW: { seqid: 48, claim: 'import-file:view', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'Importar arquivos', 'en-us': 'Import files', 'es-es': 'Importar archivos', }, }, }, }, AI_CHAT: { title: { 'pt-br': 'AutodriveDDF', 'en-us': 'AutodriveDDF', 'es-es': 'AutodriveDDF', }, permissions: { VIEW: { seqid: 49, claim: 'ai-chat:view', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'AutodriveDDF', 'en-us': 'AutodriveDDF', 'es-es': 'AutodriveDDF', }, }, }, }, 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', }, }, CERTIFY: { seqid: 53, claim: 'catalog:certify', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'Alterar o status de certificação dos Ativos', 'en-us': "Change Assets' certification status", 'es-es': 'Cambiar el estado de certificación de los Activos', }, }, 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.', }, }, 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', }, }, }, }, LINEAGE: { title: { 'pt-br': 'Explorar | Linhagem', 'en-us': 'Explore | Lineage', 'es-es': 'Explorar | Linaje', }, permissions: { VIEW: { seqid: 50, claim: 'lineage:view', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'Acessar ao módulo de Linhagem', 'en-us': 'Access to Lineage module', 'es-es': 'Acceda al módulo de Linaje', }, } }, }, EMBED: { title: { 'pt-br': 'Analisar | Incorporação', 'en-us': 'Analyze | Embedding', 'es-es': 'Analizar | Incorporación', }, permissions: { EMBED_ANALYTICS: { seqid: 44, claim: 'catalog:embed', usage: PermissionUsages.PUBLIC, 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', }, }, } }, 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', }, }, }, }, STORAGE_EXPLORER: { title: { 'pt-br': 'Storage Explorer', 'en-us': 'Storage Explorer', 'es-es': 'Storage Explorer', }, permissions: { READ: { seqid: 51, claim: 'storage-explorer:read', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'Ler dados do Storage Explorer', 'en-us': 'Read Storage Explorer data', 'es-es': 'Leer datos del Storage Explorer', }, }, WRITE: { seqid: 52, claim: 'storage-explorer:write', usage: PermissionUsages.PUBLIC, name: { 'pt-br': 'Escrever dados no Storage Explorer', 'en-us': 'Write Storage Explorer data', 'es-es': 'Escribir datos en Storage Explorer', }, }, }, }, }; export interface DadosferaModule { name: string; description: string; key: string; permissionSeqId: number; } export const DADOSFERA_MODULES_KEYS = { LOG_DASHBOARD: 'logs-dashboard', ACCESS_DASHBOARD: 'access-dashboard', DANGER_ZONE: 'danger-zone', PII: 'pii', EMBED: 'embedded-analytics', EMBED_ASSIGNED: 'embed-assigned', CATALOG: 'catalog', COLLECT: 'collect', } export const DADOSFERA_MODULES: Array = [ { 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}`);