UNPKG

mp-holistic

Version:

si prefigge l'umile compito di aiutare nella creazione di : - un server API REST mediante express - un semplice ORM per Postgres Questo tramite decoratori o classi particolari.

99 lines (89 loc) 4.19 kB
import { CostruisciFunzione, CostruisciRuoli } from "./classe.postgres"; export interface IPolicy { nomePolicy: string, tabellaDestinazione?: string, ruoli: string[], azieneScatenente: 'SELECT' | 'UPDATE' | 'DELET' | 'INSERT' | 'ALL', using?: string | ((NEW: any, OLD: any) => void | true | Error), check?: string | ((NEW: any, OLD: any) => void | true | Error), typeFunctionCheck?: 'plv8' | 'sql', typeFunctionUsing?: 'plv8' | 'sql', nomeFunzioneCheck?: string, nomeFunzioneUsing?: string /* USING : Le righe della tabella esistenti vengono confrontate con l'espressione specificata in USING CHECK : Le nuove righe che verrebbero create tramite INSERT o UPDATE vengono confrontate con l'espressione specificata in WITH CHECK */ // where: (NEW: any, OLD: any) => void | true | Error } export class ListaPolicy extends Array<Policy> { nomeTabella: string; constructor(item?: IPolicy[], nomeTabella?: string) { super(); if (item) { for (let index = 0; index < item.length; index++) { const element = item[index]; element.tabellaDestinazione= nomeTabella; this.push(new Policy(element)) } } if (nomeTabella) this.nomeTabella = nomeTabella; else this.nomeTabella = ''; } CostruiscePolicySicurezza(/* client: Client */elencoQuery: string[]) { let ritorno = ''; for (let index = 0; index < this.length; index++) { const element = this[index]; const tmp = element.CostruiscePolicySicurezza(elencoQuery, this.nomeTabella); ritorno = ritorno + '' + tmp; } return ritorno; } } export class Policy implements IPolicy { nomePolicy: string; tabellaDestinazione?: string; ruoli: string[]; azieneScatenente: 'SELECT' | 'UPDATE' | 'DELET' | 'INSERT' | 'ALL'; using?: string | ((NEW: any, OLD: any) => void | true | Error); check?: string | ((NEW: any, OLD: any) => void | true | Error); typeFunctionCheck?: 'plv8' | 'sql'; typeFunctionUsing?: 'plv8' | 'sql'; nomeFunzioneCheck?: string; nomeFunzioneUsing?: string; constructor(item: IPolicy) { this.nomePolicy = item.nomePolicy; this.tabellaDestinazione = item.tabellaDestinazione; this.ruoli = item.ruoli; this.azieneScatenente = item.azieneScatenente; this.using = item.using; this.check = item.check; this.typeFunctionCheck = item.typeFunctionCheck; this.typeFunctionUsing = item.typeFunctionUsing; this.nomeFunzioneCheck = item.nomeFunzioneCheck; this.nomeFunzioneUsing = item.nomeFunzioneUsing; } CostruiscePolicySicurezza(/* client: Client */elencoQuery: string[], nomeTabella: string) { let ritorno = ''; const ruolitesto = CostruisciRuoli(this.ruoli); const nomeFunzioneCK = CostruisciFunzione(this.check, this.nomeFunzioneCheck ?? '', this.nomePolicy, this.typeFunctionCheck ?? 'psql', 'CK', elencoQuery); const nomeFunzioneUS = CostruisciFunzione(this.using, this.nomeFunzioneUsing ?? '', this.nomePolicy, this.typeFunctionUsing ?? 'psql', 'US', elencoQuery); try { //COMMENT ON FUNCTION "FN_${this.nomeFunzione}"() IS 'Hei tanto roba questa è scritta usando plv8!!'; const queri1 = ` CREATE POLICY "PO_MP_${this.nomePolicy}" ON "${nomeTabella}" FOR ${this.azieneScatenente} TO ${ruolitesto} ${this.using && nomeFunzioneUS != "" ? 'USING "' + nomeFunzioneUS + '"()' : ''} ${this.check && nomeFunzioneCK != "" ? 'WITH CHECK ("' + nomeFunzioneCK + '"())' : ''} ; `; ritorno = ritorno + '\n' + queri1 + '\n'; elencoQuery.push(queri1); } catch (error) { console.log('\n*****\n' + error + '\n********\n\n'); } return ritorno; } }