mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-08 05:34:48 +00:00
Co-Authored-By: Beatriz Antunes <beatrizaantunes@gmail.com>
466 lines
11 KiB
TypeScript
466 lines
11 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 = {
|
|
AUTH: {
|
|
title: {
|
|
'pt-br': 'Autenticação',
|
|
'en-us': 'Authentication',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 18,
|
|
claim: 'POST /auth',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': '',
|
|
'en-us': '',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
PIPELINE: {
|
|
title: {
|
|
'pt-br': 'Coletar | Pipelines',
|
|
'en-us': 'Collect | Pipelines',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 23,
|
|
claim: 'POST /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Criar pipelines',
|
|
'en-us': 'Create pipelines',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 13,
|
|
claim: 'GET /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Buscar pipelines',
|
|
'en-us': 'Get pipelines',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 29,
|
|
claim: 'PUT /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Atualizar pipeline',
|
|
'en-us': 'Update pipeline',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 5,
|
|
claim: 'DELETE /pipelines',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Excluir pipeline',
|
|
'en-us': 'Delete pipeline',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
INPUT: {
|
|
title: {
|
|
'pt-br': 'Coletar | Conexões',
|
|
'en-us': 'Collect | Connections',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 21,
|
|
claim: 'POST /inputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar conexões',
|
|
'en-us': 'Create connections',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 9,
|
|
claim: 'GET /inputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar conexões',
|
|
'en-us': 'Get connections',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 27,
|
|
claim: 'PUT /inputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Atualizar conexões',
|
|
'en-us': 'Create connections',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 3,
|
|
claim: 'DELETE /inputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir conexões',
|
|
'en-us': 'Delete connections',
|
|
},
|
|
},
|
|
GET_ENTITIES: {
|
|
seqid: 10,
|
|
claim: 'GET /inputs/available-entities',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir conexões',
|
|
'en-us': 'Delete connections',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
OUTPUT: {
|
|
title: {
|
|
'pt-br': 'Output',
|
|
'en-us': 'Output',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 22,
|
|
claim: 'POST /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar outputs',
|
|
'en-us': 'Create outputs',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 12,
|
|
claim: 'GET /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar outputs',
|
|
'en-us': 'Get outputs',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 28,
|
|
claim: 'PUT /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar outputs',
|
|
'en-us': 'Edit outputs',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 4,
|
|
claim: 'DELETE /outputs',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir outputs',
|
|
'en-us': 'Remove outputs',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
TRANSFORMATIONS: {
|
|
title: {
|
|
'pt-br': 'Micro-transformações',
|
|
'en-us': 'Micro-transformations',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 24,
|
|
claim: 'POST /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar micro-transformações',
|
|
'en-us': 'Create micro-transformations',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 15,
|
|
claim: 'GET /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar micro-transformações',
|
|
'en-us': 'Get micro-transformations',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 30,
|
|
claim: 'PUT /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar micro-transformações',
|
|
'en-us': 'Edit micro-transformations',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 6,
|
|
claim: 'DELETE /transformations',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir micro-transformações',
|
|
'en-us': 'Remove micro-transformations',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
CATALOG: {
|
|
title: {
|
|
'pt-br': 'Explorar | Catálogo',
|
|
'en-us': 'Explore | Catalog',
|
|
},
|
|
permissions: {
|
|
GET: {
|
|
seqid: 7,
|
|
claim: 'GET /catalog',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Buscar data assets',
|
|
'en-us': 'Search for data assets',
|
|
},
|
|
},
|
|
CREATE: {
|
|
seqid: 19,
|
|
claim: 'POST /catalog',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Criar atributos no catálogo',
|
|
'en-us': 'Create attributes',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 25,
|
|
claim: 'PUT /catalog',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar atributos no catálogo',
|
|
'en-us': 'Edit attributes',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 1,
|
|
claim: 'DELETE /catalog',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir atributos no catálogo',
|
|
'en-us': 'Remove attributes',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
CONNECTORS: {
|
|
title: {
|
|
'pt-br': 'Conectores',
|
|
'en-us': 'Connectors',
|
|
},
|
|
permissions: {
|
|
CREATE: {
|
|
seqid: 20,
|
|
claim: 'POST /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Criar conectores',
|
|
'en-us': 'Create connectors',
|
|
},
|
|
},
|
|
GET: {
|
|
seqid: 8,
|
|
claim: 'GET /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Buscar conectores',
|
|
'en-us': 'Get connectors',
|
|
},
|
|
},
|
|
UPDATE: {
|
|
seqid: 26,
|
|
claim: 'PUT /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Editar conectores',
|
|
'en-us': 'Edit connectors',
|
|
},
|
|
},
|
|
DELETE: {
|
|
seqid: 2,
|
|
claim: 'DELETE /connectors',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Excluir conectores',
|
|
'en-us': 'Remove connectors',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
SNOWFLAKE: {
|
|
title: {
|
|
'pt-br': 'Explorar | Consolidar',
|
|
'en-us': 'Explore | Data consolidation',
|
|
},
|
|
permissions: {
|
|
OPEN: {
|
|
seqid: 14,
|
|
claim: 'GET /snowflake',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Snowflake',
|
|
'en-us': 'Access Snowflake',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
ZENDESK: {
|
|
title: {
|
|
'pt-br': 'Zendesk',
|
|
'en-us': 'Zendesk',
|
|
},
|
|
permissions: {
|
|
OPEN: {
|
|
seqid: 16,
|
|
claim: 'GET /zendesk',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar Zendesk',
|
|
'en-us': 'Access Zendesk',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
METABASE: {
|
|
title: {
|
|
'pt-br': 'Analisar | Visualização',
|
|
'en-us': 'Analyze | Visualization',
|
|
},
|
|
permissions: {
|
|
OPEN: {
|
|
seqid: 11,
|
|
claim: 'GET /metabase',
|
|
usage: PermissionUsages.PUBLIC,
|
|
name: {
|
|
'pt-br': 'Acessar Metabase',
|
|
'en-us': 'Access Metabase',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
ORCHEST: {
|
|
title: {
|
|
'pt-br': 'Analisar | Inteligência',
|
|
'en-us': 'Analyze | Intelligence',
|
|
},
|
|
permissions: {
|
|
INTELLIGENCE: {
|
|
seqid: 31,
|
|
claim: 'intelligence:open',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar Orchest',
|
|
'en-us': 'Access Orchest',
|
|
},
|
|
},
|
|
APP_BUILDER: {
|
|
seqid: 32,
|
|
claim: 'app-builder:open',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar App Builder',
|
|
'en-us': 'Access App Builder',
|
|
},
|
|
},
|
|
MACHINE_LEARNING: {
|
|
seqid: 33,
|
|
claim: 'machine-learning:open',
|
|
usage: PermissionUsages.INTERNAL,
|
|
name: {
|
|
'pt-br': 'Acessar Machine Learning',
|
|
'en-us': 'Access Machine Learning',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
USERS: {
|
|
title: {
|
|
'pt-br': 'Usuários',
|
|
'en-us': 'Users',
|
|
},
|
|
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',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
// traverses the object searching for duplicate seqids or claims (executes at runtime)
|
|
let nextAvailableSeqid = 0;
|
|
const seqids = Object.values(PERMISSIONS).flatMap((namespace) =>
|
|
Object.values(namespace.permissions).map(({ seqid }) => seqid),
|
|
);
|
|
const claims = Object.values(PERMISSIONS).flatMap((namespace) =>
|
|
Object.values(namespace.permissions).map(({ claim }) => claim),
|
|
);
|
|
Object.values(PERMISSIONS).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);
|
|
}),
|
|
);
|
|
|
|
logger.log(`next available seqid ${nextAvailableSeqid + 1}`);
|