Files
maestro/src/authentication/permissions.enum.ts
T
2022-07-29 13:39:38 -03:00

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}`);