This repository has been archived by the owner on Sep 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstartup.js
123 lines (111 loc) · 4.23 KB
/
startup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { knx, permMappings, roleMappings } from './index.js';
import { setIfMissingKey } from './helpers/misc.js';
const perms = [ 'Read', 'Write' ];
/**
* Adatbázis bejegyzésekből egy fastruktúrát alakít ki (objektumokból).
* @param {object[]} arr RowDataPacket-eket tartalmazó array
* @param {'perms'|'routes'|'errors'} mapType feldolgozás módszere, feldolgozandó adat típusa
* @returns {object} Fastrukturált objektum, a paramétereknek megfelelő módon.
*/
function treeifyMaps(arr, mapType = 'perms') {
const tree = {};
if (mapType == 'perms') {
for (let row of arr) {
setIfMissingKey(tree, row.Table);
setIfMissingKey(tree[row.Table], row.Field);
setIfMissingKey(tree[row.Table][row.Field], row.Role);
for (let perm of perms)
tree[row.Table][row.Field][row.Role][perm.toLowerCase()] = Boolean(row[perm]);
}
/* User központú mapping
for (let row of arr) {
if (!tables.includes(row.Table)) tables.push(row.Table);
row.Role = roleMappings.byID[row.Role];
setIfMissingKey(tree, row.Role);
for (let perm of perms) {
const keyname = perm.toLowerCase();
setIfMissingKey(tree[row.Role], keyname);
setIfMissingKey(tree[row.Role][keyname], row.Table);
tree[row.Role][keyname][row.Table][row.Field] = Boolean(row[perm][0]);
}
}*/
} else if (mapType == 'routes') {
for (let row of arr) {
setIfMissingKey(tree, row.Route);
setIfMissingKey(tree[row.Route], row.Role);
tree[row.Route][row.Role].accessible = Boolean(row.Accessible);
tree[row.Route][row.Role].hide = Boolean(row.Hide);
}
} else if (mapType == 'errors') {
for (let row of arr) {
tree[row.Keyword] = { 'code': row.Code, 'description': row.Description };
}
}
return tree;
}
/**
* Permissziós táblában nem megnevezett mezők engedélyeinek alapértelmezettre állítása.
*/
async function extendMissingPermissions() {
const permColumnInfo = await knx('permissions').columnInfo();
const defaults = {};
for (let perm of perms)
defaults[perm] = (permColumnInfo[perm].defaultValue == '0' ? false : true);
for (let table in permMappings) {
let columns = await knx(table).columnInfo();
for (let column in columns) {
setIfMissingKey(permMappings[table], column);
for (let role in roleMappings.byID) {
if (role in permMappings[table][column]) continue;
setIfMissingKey(permMappings[table][column], role);
for (let perm of perms)
permMappings[table][column][role][perm.toLowerCase()] = defaults[perm];
}
}
}
/* User központú mapping
for (let user in permMappings) {
for (let access in permMappings[user]) {
for (let table in permMappings[user][access]) {
for (let field in tableInfos[table]) {
if (!has(permMappings[user][access][table], field))
permMappings[user][access][table][field] = defaults[access];
}
}
}
}*/
}
/**
* Rekurzívan mountol egy fastruktúrált objektumot, mely kulcsnevei az endpointok, értékei a router-ek.
* @param {object} tree Fastruktúrált objektum. Ha kulcshoz tartozó érték egy objektum, akkor a fő route-ot azon belül '/' kulccsal jelöljük.
*/
function mountTree(tree) {
for (let routeName in tree) {
if (routeName == '/') continue;
if (typeof tree[routeName] == 'function')
tree['/'].use(routeName, tree[routeName]);
else {
tree['/'].use(routeName, tree[routeName]['/']);
mountTree(tree[routeName]);
}
}
}
/**
* ColumnInfo-k lekérdezése.
* @param {string[]} tablesArr Lekérdezendő táblák nevei. Üres lista vagy undefined ha minden.
* @returns {Promise<Object.<string, import('knex').Knex.ColumnInfo>>} Objektumba rendezve, kulcsok a táblanevek, értékek a ColumnInfo-k.
*/
async function queryTableColumns(tablesArr) {
if (tablesArr == undefined) tablesArr = [];
if (tablesArr?.length == 0) {
const query = await knx.raw('show tables');
for (let rowObj of query[0]) {
tablesArr.push(Object.values(rowObj)[0]);
}
}
const tables = {};
for (let table of tablesArr)
tables[table] = await knx(table).columnInfo();
return tables;
}
export { treeifyMaps, extendMissingPermissions, mountTree, queryTableColumns };