@opengis/fastify-table 2.0.160 → 2.0.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/plugins/access/funcs/getResources.d.ts +7 -0
- package/dist/server/plugins/access/funcs/getResources.d.ts.map +1 -0
- package/dist/server/plugins/access/funcs/getResources.js +12 -0
- package/dist/server/plugins/access/funcs/getUserPermissions.d.ts +5 -0
- package/dist/server/plugins/access/funcs/getUserPermissions.d.ts.map +1 -0
- package/dist/server/plugins/access/funcs/getUserPermissions.js +36 -0
- package/dist/server/plugins/crud/funcs/dataInsert.d.ts.map +1 -1
- package/dist/server/plugins/crud/funcs/dataInsert.js +7 -1
- package/dist/server/plugins/crud/funcs/getAccess.d.ts +1 -1
- package/dist/server/plugins/crud/funcs/getAccess.d.ts.map +1 -1
- package/dist/server/plugins/crud/funcs/getAccess.js +20 -8
- package/dist/server/plugins/file/uploadMultiPart.d.ts +5 -3
- package/dist/server/plugins/file/uploadMultiPart.d.ts.map +1 -1
- package/dist/server/plugins/file/uploadMultiPart.js +2 -1
- package/dist/server/plugins/hook/applyHook.d.ts +1 -1
- package/dist/server/plugins/hook/applyHook.d.ts.map +1 -1
- package/dist/server/plugins/hook/applyHook.js +8 -2
- package/dist/server/plugins/policy/funcs/checkPermissions.js +2 -2
- package/dist/server/routes/access/controllers/access.resources.d.ts +6 -0
- package/dist/server/routes/access/controllers/access.resources.d.ts.map +1 -0
- package/dist/server/routes/access/controllers/access.resources.js +14 -0
- package/dist/server/routes/access/controllers/resources.d.ts +11 -0
- package/dist/server/routes/access/controllers/resources.d.ts.map +1 -0
- package/dist/server/routes/access/controllers/resources.js +14 -0
- package/dist/server/routes/access/functions/resources.d.ts +6 -0
- package/dist/server/routes/access/functions/resources.d.ts.map +1 -0
- package/dist/server/routes/access/functions/resources.js +11 -0
- package/dist/server/routes/access/index.d.ts +1 -1
- package/dist/server/routes/access/index.d.ts.map +1 -1
- package/dist/server/routes/access/index.js +3 -1
- package/dist/server/routes/auth/controllers/core/getUserInfo.js +2 -2
- package/dist/server/routes/crud/controllers/deleteCrud.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/deleteCrud.js +9 -3
- package/dist/server/routes/crud/controllers/insert.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/insert.js +9 -3
- package/dist/server/routes/crud/controllers/table.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/table.js +21 -8
- package/dist/server/routes/crud/controllers/update.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/update.js +12 -3
- package/dist/server/routes/file/controllers/upload.d.ts +1 -1
- package/dist/server/routes/file/controllers/upload.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/upload.js +13 -2
- package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
- package/dist/server/routes/table/functions/getData.js +18 -5
- package/dist/utils.d.ts +3 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare const resourcesList: any;
|
|
2
|
+
declare const publicResourcesList: any[];
|
|
3
|
+
declare const resources: any;
|
|
4
|
+
export { resourcesList, publicResourcesList, resources };
|
|
5
|
+
declare const _default: null;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=getResources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getResources.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/access/funcs/getResources.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,aAAa,KAEb,CAAC;AAEP,QAAA,MAAM,mBAAmB,EAAE,GAAG,EAM7B,CAAC;AAEF,QAAA,MAAM,SAAS,KAGd,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;;AACzD,wBAAoB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
const resourcesList = existsSync("config/resources.json")
|
|
3
|
+
? JSON.parse(readFileSync("config/resources.json", "utf-8") || "[]")
|
|
4
|
+
: [];
|
|
5
|
+
const publicResourcesList = resourcesList.map(({ name, actions, feature }) => ({
|
|
6
|
+
name,
|
|
7
|
+
actions,
|
|
8
|
+
feature,
|
|
9
|
+
}));
|
|
10
|
+
const resources = resourcesList.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.table }), {});
|
|
11
|
+
export { resourcesList, publicResourcesList, resources };
|
|
12
|
+
export default null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserPermissions.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/access/funcs/getUserPermissions.ts"],"names":[],"mappings":"AAYA,wBAA8B,kBAAkB,CAC9C,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,EAAE,MAAmB,gBAkCtB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import pgClients from "../../pg/pgClients.js";
|
|
2
|
+
import { resourcesList } from "./getResources.js";
|
|
3
|
+
const q = `select resource_id as name,
|
|
4
|
+
array_intersect(coalesce(a.actions, array['read']), coalesce(c.actions, array['create', 'read', 'update', 'delete'])) as actions,
|
|
5
|
+
b.name as role
|
|
6
|
+
from admin.role_access a
|
|
7
|
+
left join admin.roles b on a.role_id=b.role_id and b.enabled
|
|
8
|
+
left join admin.user_roles c on a.role_id=c.role_id
|
|
9
|
+
where resource_id is not null and $1 in (a.user_uid, c.user_uid)`;
|
|
10
|
+
export default async function getUserPermissions({ uid, resource }, pg = pgClients.client) {
|
|
11
|
+
if (!uid)
|
|
12
|
+
return [];
|
|
13
|
+
// ? in case pg.pk not set yet
|
|
14
|
+
const pks = await pg
|
|
15
|
+
.query(`SELECT json_object_agg(conrelid::regclass, (SELECT attname FROM pg_attribute WHERE attrelid = c.conrelid AND attnum = c.conkey[1]) )
|
|
16
|
+
FROM pg_constraint c WHERE contype = 'p' AND connamespace::regnamespace::text = 'admin'`)
|
|
17
|
+
.then((el) => el.rows?.[0]?.json_object_agg || {});
|
|
18
|
+
const permissions = pks["admin.role_access"] &&
|
|
19
|
+
pks["admin.user_roles"] &&
|
|
20
|
+
pks["admin.users"] &&
|
|
21
|
+
uid
|
|
22
|
+
? await pg.query(q, [uid]).then((el) => el.rows || [])
|
|
23
|
+
: [];
|
|
24
|
+
const filteredPermissions = resource
|
|
25
|
+
? permissions.filter((el) => el.name === resource)
|
|
26
|
+
: permissions;
|
|
27
|
+
const userPermissions = (filteredPermissions || [])
|
|
28
|
+
.map((e) => {
|
|
29
|
+
const resource = resourcesList.find((el) => el.name === e.name);
|
|
30
|
+
if (resource) {
|
|
31
|
+
return { ...resource, actions: e.actions };
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
.filter(Boolean);
|
|
35
|
+
return userPermissions;
|
|
36
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataInsert.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/crud/funcs/dataInsert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgBzD,wBAA8B,UAAU,CAAC,EACvC,EAAE,EACF,KAAK,EAAE,MAAM,EACb,OAAO,EACP,IAAI,EACJ,EAAE,EAAE,GAAG,EACP,GAAG,EACH,SAAc,GACf,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC,
|
|
1
|
+
{"version":3,"file":"dataInsert.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/crud/funcs/dataInsert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgBzD,wBAA8B,UAAU,CAAC,EACvC,EAAE,EACF,KAAK,EAAE,MAAM,EACb,OAAO,EACP,IAAI,EACJ,EAAE,EAAE,GAAG,EACP,GAAG,EACH,SAAc,GACf,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC,gBAmKA"}
|
|
@@ -111,7 +111,13 @@ export default async function dataInsert({ id, table: table1, referer, data, pg:
|
|
|
111
111
|
if (!isClient) {
|
|
112
112
|
await client.query("commit;");
|
|
113
113
|
}
|
|
114
|
-
return {
|
|
114
|
+
return {
|
|
115
|
+
rowCount: res.rowCount,
|
|
116
|
+
command: res.command,
|
|
117
|
+
id: id1,
|
|
118
|
+
data: res.rows[0],
|
|
119
|
+
...res.rows[0],
|
|
120
|
+
};
|
|
115
121
|
}
|
|
116
122
|
catch (err) {
|
|
117
123
|
logger.file("crud/insert", {
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
* @param {String} user.user_type User type
|
|
9
9
|
* @returns { scope: String, roles: String[], actions: String[], query: String }
|
|
10
10
|
*/
|
|
11
|
-
export default function getAccess({ table, form, user, method }: any, pg?: any): Promise<{} | null>;
|
|
11
|
+
export default function getAccess({ resource, table, form, user, method }: any, pg?: any): Promise<{} | null>;
|
|
12
12
|
//# sourceMappingURL=getAccess.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAccess.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/crud/funcs/getAccess.ts"],"names":[],"mappings":"AA8BA;;;;;;;;;GASG;AAEH,wBAA8B,SAAS,CACrC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAS,EAAE,MAAc,EAAE,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"getAccess.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/crud/funcs/getAccess.ts"],"names":[],"mappings":"AA8BA;;;;;;;;;GASG;AAEH,wBAA8B,SAAS,CACrC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAS,EAAE,MAAc,EAAE,EAAE,GAAG,EACzD,EAAE,MAAmB,sBA2GtB"}
|
|
@@ -2,7 +2,7 @@ import pgClients from "../../pg/pgClients.js";
|
|
|
2
2
|
import getMeta from "../../pg/funcs/getMeta.js";
|
|
3
3
|
import getTemplate from "../../table/funcs/getTemplate.js";
|
|
4
4
|
import applyHook from "../../hook/applyHook.js";
|
|
5
|
-
import getUserPermissions from "../../
|
|
5
|
+
import getUserPermissions from "../../access/funcs/getUserPermissions.js";
|
|
6
6
|
const allActions = ["view", "edit", "add", "del"];
|
|
7
7
|
const matches = {
|
|
8
8
|
read: "view",
|
|
@@ -35,10 +35,16 @@ where $1 in (a.route_id, a.alias, a.table_name) and $2 in (b.user_uid, d.user_ui
|
|
|
35
35
|
* @param {String} user.user_type User type
|
|
36
36
|
* @returns { scope: String, roles: String[], actions: String[], query: String }
|
|
37
37
|
*/
|
|
38
|
-
export default async function getAccess({ table, form, user = {}, method = "GET" }, pg = pgClients.client) {
|
|
38
|
+
export default async function getAccess({ resource, table, form, user = {}, method = "GET" }, pg = pgClients.client) {
|
|
39
39
|
if (!table)
|
|
40
40
|
return null;
|
|
41
|
-
const hookData = await applyHook("getAccess", {
|
|
41
|
+
const hookData = await applyHook("getAccess", {
|
|
42
|
+
resource,
|
|
43
|
+
table,
|
|
44
|
+
user,
|
|
45
|
+
pg,
|
|
46
|
+
method,
|
|
47
|
+
});
|
|
42
48
|
if (hookData)
|
|
43
49
|
return hookData;
|
|
44
50
|
const { uid, user_type: userType = "regular" } = user;
|
|
@@ -48,6 +54,15 @@ export default async function getAccess({ table, form, user = {}, method = "GET"
|
|
|
48
54
|
if (userType === "viewer") {
|
|
49
55
|
return { actions: ["view"], query: "1=1" };
|
|
50
56
|
}
|
|
57
|
+
if (resource) {
|
|
58
|
+
const permissions = await getUserPermissions({ resource, uid }, pg);
|
|
59
|
+
const actions = (permissions || []).flatMap((el) => el.actions.map((e) => matches[e] || e));
|
|
60
|
+
return {
|
|
61
|
+
scope: permissions?.scope,
|
|
62
|
+
actions,
|
|
63
|
+
query: permissions?.query || "1=1",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
51
66
|
const body = await getTemplate("table", table);
|
|
52
67
|
const tableActions = !body && form
|
|
53
68
|
? allActions // if db table and form => full access (token)
|
|
@@ -90,15 +105,12 @@ export default async function getAccess({ table, form, user = {}, method = "GET"
|
|
|
90
105
|
}))
|
|
91
106
|
: {};
|
|
92
107
|
const query = userAccess?.scope === "my" ? `uid='${uid}'` : "1=1";
|
|
93
|
-
const
|
|
94
|
-
.filter((e) => e.name === (body.table || table))
|
|
95
|
-
.flatMap((el) => el.actions.map((e) => matches[e] || e)));
|
|
96
|
-
const actions = permissions.concat(userAccess?.interface_actions
|
|
108
|
+
const actions = userAccess?.interface_actions
|
|
97
109
|
?.filter((el) => userAccess?.role_actions?.length
|
|
98
110
|
? userAccess?.role_actions.includes(el)
|
|
99
111
|
: true)
|
|
100
112
|
?.filter((el) => tableActions.includes(el))
|
|
101
|
-
?.filter?.((el, idx, arr) => arr.indexOf(el) === idx)
|
|
113
|
+
?.filter?.((el, idx, arr) => arr.indexOf(el) === idx);
|
|
102
114
|
return {
|
|
103
115
|
scope: userAccess?.scope,
|
|
104
116
|
roles: userAccess?.roles,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface IFile {
|
|
1
|
+
export interface IFile {
|
|
2
2
|
originalFilename?: string;
|
|
3
3
|
newFilename?: string;
|
|
4
4
|
filepath?: string;
|
|
@@ -10,12 +10,14 @@ interface IFile {
|
|
|
10
10
|
buffer?: Buffer;
|
|
11
11
|
filename?: string;
|
|
12
12
|
fields?: Record<string, any>;
|
|
13
|
+
error?: string;
|
|
14
|
+
code?: number;
|
|
13
15
|
}
|
|
14
|
-
export
|
|
16
|
+
export declare function uploadMultiPart(req: any, { extensions, raw, subdir, originalFilename, }?: {
|
|
15
17
|
extensions?: string[];
|
|
16
18
|
raw?: boolean;
|
|
17
19
|
subdir?: string;
|
|
18
20
|
originalFilename?: boolean;
|
|
19
21
|
}): Promise<IFile>;
|
|
20
|
-
export
|
|
22
|
+
export default uploadMultiPart;
|
|
21
23
|
//# sourceMappingURL=uploadMultiPart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadMultiPart.d.ts","sourceRoot":"","sources":["../../../../server/plugins/file/uploadMultiPart.ts"],"names":[],"mappings":"AAqBA,
|
|
1
|
+
{"version":3,"file":"uploadMultiPart.d.ts","sourceRoot":"","sources":["../../../../server/plugins/file/uploadMultiPart.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,KAAK;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA2CD,wBAAsB,eAAe,CACnC,GAAG,EAAE,GAAG,EACR,EACE,UAAU,EACV,GAAG,EACH,MAAM,EACN,gBAAwB,GACzB,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,OAAO,CAAC,KAAK,CAAC,CAmGhB;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -36,7 +36,7 @@ async function writeFileToDisk(file, buffer) {
|
|
|
36
36
|
await writeFile(file.filepath, buffer);
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
|
-
export
|
|
39
|
+
export async function uploadMultiPart(req, { extensions, raw, subdir, originalFilename = false, } = {}) {
|
|
40
40
|
const allowedExtensions = req.routeOptions?.url === "/file/upload-image/*" ? images : all;
|
|
41
41
|
const parts = req.parts();
|
|
42
42
|
// const part = await parts.next();
|
|
@@ -110,3 +110,4 @@ export default async function uploadMultiPart(req, { extensions, raw, subdir, or
|
|
|
110
110
|
}
|
|
111
111
|
return file;
|
|
112
112
|
}
|
|
113
|
+
export default uploadMultiPart;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function applyHook(name: any, data: any): Promise<{} | null>;
|
|
1
|
+
export default function applyHook(name: any, data: any, unsafe?: boolean): Promise<{} | null>;
|
|
2
2
|
//# sourceMappingURL=applyHook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyHook.d.ts","sourceRoot":"","sources":["../../../../server/plugins/hook/applyHook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"applyHook.d.ts","sourceRoot":"","sources":["../../../../server/plugins/hook/applyHook.ts"],"names":[],"mappings":"AAEA,wBAA8B,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAQ,sBAyB3E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import hookList from
|
|
2
|
-
|
|
1
|
+
import hookList from "./hookList.js";
|
|
2
|
+
import logger from "../logger/getLogger.js";
|
|
3
|
+
export default async function applyHook(name, data, unsafe = false) {
|
|
3
4
|
if (!hookList[name]?.length)
|
|
4
5
|
return null;
|
|
5
6
|
const result = {};
|
|
@@ -9,7 +10,12 @@ export default async function applyHook(name, data) {
|
|
|
9
10
|
Object.assign(result, hookData);
|
|
10
11
|
}
|
|
11
12
|
})).catch((err) => {
|
|
13
|
+
logger.file("applyHook/error", { error: err.toString(), name });
|
|
12
14
|
console.error("applyHook", name, err.toString());
|
|
15
|
+
if (unsafe) {
|
|
16
|
+
throw err;
|
|
17
|
+
}
|
|
18
|
+
return { error: err.toString() };
|
|
13
19
|
});
|
|
14
20
|
if (Object.keys(result).length) {
|
|
15
21
|
return result;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logger from "../../logger/getLogger.js";
|
|
2
|
-
import getUserPermissions from "../../
|
|
2
|
+
import getUserPermissions from "../../access/funcs/getUserPermissions.js";
|
|
3
3
|
import pgClients from "../../pg/pgClients.js";
|
|
4
4
|
export default async function checkPermissions(req, reply) {
|
|
5
5
|
const { originalUrl: path, query, params, method, routeOptions, pg = pgClients.client, } = req;
|
|
@@ -16,7 +16,7 @@ export default async function checkPermissions(req, reply) {
|
|
|
16
16
|
if (!permissions?.length) {
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
|
-
const userPermissions = await getUserPermissions(user?.uid, pg).then((arr) => arr.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.actions }), {}));
|
|
19
|
+
const userPermissions = await getUserPermissions({ uid: user?.uid }, pg).then((arr) => arr.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.actions }), {}));
|
|
20
20
|
const havePermission = Object.keys(userPermissions).length &&
|
|
21
21
|
permissions?.length &&
|
|
22
22
|
permissions.length ===
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.resources.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.resources.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,GAAG,KAEH,CAAC;AAEP,QAAA,MAAM,eAAe,EAAE,GAAG,EAIvB,CAAC;AAEJ,QAAA,MAAM,eAAe,GAAU,MAAM,GAAG,KAAG,OAAO,CAAC,GAAG,EAAE,CAEvD,CAAC;AAEF,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,eAAe,EAAE,CAAC;AAC7C,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
const arr = existsSync("config/resources.json")
|
|
3
|
+
? JSON.parse(readFileSync("config/resources.json", "utf-8") || "[]")
|
|
4
|
+
: [];
|
|
5
|
+
const publicResources = arr.map(({ name, actions, feature }) => ({
|
|
6
|
+
name,
|
|
7
|
+
actions,
|
|
8
|
+
feature,
|
|
9
|
+
}));
|
|
10
|
+
const accessResources = async (req) => {
|
|
11
|
+
return publicResources;
|
|
12
|
+
};
|
|
13
|
+
export { arr as resources, publicResources };
|
|
14
|
+
export default accessResources;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const arr: any;
|
|
2
|
+
interface Resource {
|
|
3
|
+
name: string;
|
|
4
|
+
actions: string[];
|
|
5
|
+
feature: string;
|
|
6
|
+
}
|
|
7
|
+
declare const publicResources: Resource[];
|
|
8
|
+
declare const resources: (req?: any) => Promise<Resource[]>;
|
|
9
|
+
export { arr as resources, publicResources };
|
|
10
|
+
export default resources;
|
|
11
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/resources.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,GAAG,KAEH,CAAC;AAEP,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,eAAe,EAAE,QAAQ,EAM9B,CAAC;AAEF,QAAA,MAAM,SAAS,GAAU,MAAM,GAAG,KAAG,OAAO,CAAC,QAAQ,EAAE,CAEtD,CAAC;AAEF,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,eAAe,EAAE,CAAC;AAC7C,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
const arr = existsSync("config/resources.json")
|
|
3
|
+
? JSON.parse(readFileSync("config/resources.json", "utf-8") || "[]")
|
|
4
|
+
: [];
|
|
5
|
+
const publicResources = arr.map(({ name, actions, feature }) => ({
|
|
6
|
+
name,
|
|
7
|
+
actions,
|
|
8
|
+
feature,
|
|
9
|
+
}));
|
|
10
|
+
const resources = async (req) => {
|
|
11
|
+
return publicResources;
|
|
12
|
+
};
|
|
13
|
+
export { arr as resources, publicResources };
|
|
14
|
+
export default resources;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/functions/resources.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,aAAa,KAEb,CAAC;AAEP,QAAA,MAAM,mBAAmB,EAAE,GAAG,EAM7B,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;;AAC9C,wBAAoB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
const resourcesList = existsSync("config/resources.json")
|
|
3
|
+
? JSON.parse(readFileSync("config/resources.json", "utf-8") || "[]")
|
|
4
|
+
: [];
|
|
5
|
+
const publicResourcesList = resourcesList.map(({ name, actions, feature }) => ({
|
|
6
|
+
name,
|
|
7
|
+
actions,
|
|
8
|
+
feature,
|
|
9
|
+
}));
|
|
10
|
+
export { resourcesList, publicResourcesList };
|
|
11
|
+
export default null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function route(fastify: any, opt?: any): void
|
|
1
|
+
export default function route(fastify: any, opt?: any): Promise<void>;
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/access/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/access/index.ts"],"names":[],"mappings":"AAgBA,wBAA8B,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAE,GAAQ,iBA2B9D"}
|
|
@@ -3,11 +3,13 @@ import accessGroupPost from "./controllers/access.group.post.js";
|
|
|
3
3
|
import accessUser from "./controllers/access.user.js";
|
|
4
4
|
import accessUserPost from "./controllers/access.user.post.js";
|
|
5
5
|
import accessInterface from "./controllers/access.interface.js";
|
|
6
|
+
import { publicResourcesList } from "../../plugins/access/funcs/getResources.js";
|
|
6
7
|
import { accessGroupPostSchema, accessGroupSchema, accessInterfaceSchema, accessUserPostSchema, accessUserSchema, } from "./schema.js";
|
|
7
|
-
export default function route(fastify, opt = {}) {
|
|
8
|
+
export default async function route(fastify, opt = {}) {
|
|
8
9
|
fastify.get("/access-group/:id", { schema: accessGroupSchema }, accessGroup);
|
|
9
10
|
fastify.post("/access-group/:id", { schema: accessGroupPostSchema }, accessGroupPost);
|
|
10
11
|
fastify.get("/access-user/:id", { permission: "admin.users.read", schema: accessUserSchema }, accessUser);
|
|
11
12
|
fastify.post("/access-user/:id", { permission: "admin.users.update", schema: accessUserPostSchema }, accessUserPost);
|
|
12
13
|
fastify.get("/access-interface/:name", { schema: accessInterfaceSchema }, accessInterface);
|
|
14
|
+
fastify.get("/resources", { config: { policy: "L0" } }, async () => publicResourcesList);
|
|
13
15
|
}
|
|
@@ -2,7 +2,7 @@ import config from "../../../../../config.js";
|
|
|
2
2
|
import pgClients from "../../../../plugins/pg/pgClients.js";
|
|
3
3
|
import applyHook from "../../../../plugins/hook/applyHook.js";
|
|
4
4
|
import getRedis from "../../../../plugins/redis/funcs/getRedis.js";
|
|
5
|
-
import getUserPermissions from "../../../../plugins/
|
|
5
|
+
import getUserPermissions from "../../../../plugins/access/funcs/getUserPermissions.js";
|
|
6
6
|
const rclient2 = getRedis({ db: 2 });
|
|
7
7
|
const q = `select
|
|
8
8
|
|
|
@@ -74,7 +74,7 @@ export default async function getUserInfo(req) {
|
|
|
74
74
|
req.user?.uid
|
|
75
75
|
? await pg.query(q, [user.uid]).then((el) => el.rows || [])
|
|
76
76
|
: [];
|
|
77
|
-
const permissions = await getUserPermissions(user?.uid, pg);
|
|
77
|
+
const permissions = await getUserPermissions({ uid: user?.uid }, pg);
|
|
78
78
|
Object.assign(payload, {
|
|
79
79
|
user: userInfo,
|
|
80
80
|
settings,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteCrud.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/deleteCrud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"deleteCrud.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/deleteCrud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAc5C,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBA8IrE"}
|
|
@@ -5,6 +5,7 @@ import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
|
5
5
|
import applyHook from "../../../plugins/hook/applyHook.js";
|
|
6
6
|
import getOpt from "../../../plugins/crud/funcs/getOpt.js";
|
|
7
7
|
import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
|
|
8
|
+
import { resources } from "../../../plugins/access/funcs/getResources.js";
|
|
8
9
|
import dataDelete from "../../../plugins/crud/funcs/dataDelete.js";
|
|
9
10
|
export default async function deleteCrud(req, reply) {
|
|
10
11
|
const { pg = pgClients.client, user = {}, params = {}, headers = {}, method, } = req || {};
|
|
@@ -25,7 +26,11 @@ export default async function deleteCrud(req, reply) {
|
|
|
25
26
|
})) ||
|
|
26
27
|
(await getOpt(params.id || params.table, user.uid)) ||
|
|
27
28
|
(await getOpt(params.table, user.uid));
|
|
28
|
-
const
|
|
29
|
+
const resource = resources[hookData?.resource || tokenData?.resource || params.table]
|
|
30
|
+
? tokenData?.resource || params.table
|
|
31
|
+
: undefined;
|
|
32
|
+
const { table: del, id = params.id, query, actions: actionsToken, } = (resources[params.table] ? { table: resources[params.table] } : null) ||
|
|
33
|
+
hookData ||
|
|
29
34
|
tokenData ||
|
|
30
35
|
(config.security?.disableToken || config.local || config.auth?.disable
|
|
31
36
|
? req.params
|
|
@@ -36,14 +41,15 @@ export default async function deleteCrud(req, reply) {
|
|
|
36
41
|
code: 403,
|
|
37
42
|
});
|
|
38
43
|
}
|
|
39
|
-
const { actions = [], message: accessMessage } = (await getAccess({ table: del, id, user, method }, pg)) || {};
|
|
44
|
+
const { actions = [], message: accessMessage } = (await getAccess({ resource, table: del, id, user, method }, pg)) || {};
|
|
40
45
|
if (accessMessage) {
|
|
41
46
|
return reply.status(403).send({
|
|
42
47
|
error: accessMessage,
|
|
43
48
|
code: 403,
|
|
44
49
|
});
|
|
45
50
|
}
|
|
46
|
-
if (!
|
|
51
|
+
if (!resource &&
|
|
52
|
+
!tokenData &&
|
|
47
53
|
!config?.local &&
|
|
48
54
|
!config.security?.disableToken &&
|
|
49
55
|
!config.auth?.disable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAgB5C,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAsNjE"}
|
|
@@ -9,6 +9,7 @@ import validateData from "../../../plugins/crud/funcs/validateData.js";
|
|
|
9
9
|
import getAccess from "../../../plugins/crud/funcs/getAccess.js";
|
|
10
10
|
import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
11
11
|
import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
|
|
12
|
+
import { resources } from "../../../plugins/access/funcs/getResources.js";
|
|
12
13
|
export default async function insert(req, reply) {
|
|
13
14
|
const { pg = pgClients.client, user = {}, params = {}, body = {}, headers = {}, method, } = req || {};
|
|
14
15
|
if (!user) {
|
|
@@ -33,19 +34,24 @@ export default async function insert(req, reply) {
|
|
|
33
34
|
mode: "a",
|
|
34
35
|
json: 1,
|
|
35
36
|
});
|
|
36
|
-
const
|
|
37
|
+
const resource = resources[hookData?.resource || tokenData?.resource || params.table]
|
|
38
|
+
? tokenData?.resource || params.table
|
|
39
|
+
: undefined;
|
|
40
|
+
const { form, table: add } = (resources[params.table] ? { table: resources[params.table] } : null) ||
|
|
41
|
+
hookData ||
|
|
37
42
|
tokenData ||
|
|
38
43
|
(config.security?.disableToken || config.local || config.auth?.disable
|
|
39
44
|
? req.params
|
|
40
45
|
: {});
|
|
41
|
-
const { actions = [], message: accessMessage } = (await getAccess({ table: add, form, user, method }, pg)) || {};
|
|
46
|
+
const { actions = [], message: accessMessage } = (await getAccess({ resource, table: add, form, user, method }, pg)) || {};
|
|
42
47
|
if (accessMessage) {
|
|
43
48
|
return reply.status(403).send({
|
|
44
49
|
error: accessMessage,
|
|
45
50
|
code: 403,
|
|
46
51
|
});
|
|
47
52
|
}
|
|
48
|
-
if (!
|
|
53
|
+
if (!resource &&
|
|
54
|
+
!tokenData &&
|
|
49
55
|
!config.local &&
|
|
50
56
|
!config.security?.disableToken &&
|
|
51
57
|
!config.auth?.disable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgB5C,wBAA8B,QAAQ,CACpC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,GAAG,gBA8PZ"}
|
|
@@ -7,6 +7,7 @@ import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
|
7
7
|
import setToken from "../../../plugins/crud/funcs/setToken.js";
|
|
8
8
|
import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
|
|
9
9
|
import extraDataGet from "../../../plugins/extra/extraDataGet.js";
|
|
10
|
+
import { resources } from "../../../plugins/access/funcs/getResources.js";
|
|
10
11
|
export default async function tableAPI(req, reply, called) {
|
|
11
12
|
const { pg = pgClients.client, params, user = {}, query = {}, method } = req;
|
|
12
13
|
const tokenData = await getToken({
|
|
@@ -24,7 +25,13 @@ export default async function tableAPI(req, reply, called) {
|
|
|
24
25
|
if (hookData?.message && hookData?.status) {
|
|
25
26
|
return reply.status(hookData?.status).send(hookData?.message);
|
|
26
27
|
}
|
|
27
|
-
const
|
|
28
|
+
const resource = resources[hookData?.resource || tokenData?.resource || params.table]
|
|
29
|
+
? tokenData?.resource || params.table
|
|
30
|
+
: undefined;
|
|
31
|
+
const templateName = resources[params.table] ||
|
|
32
|
+
hookData?.table ||
|
|
33
|
+
tokenData?.table ||
|
|
34
|
+
params.table;
|
|
28
35
|
const loadTable = await getTemplate("table", templateName);
|
|
29
36
|
if (!loadTable &&
|
|
30
37
|
!pg.pk?.[tokenData?.table] &&
|
|
@@ -41,7 +48,8 @@ export default async function tableAPI(req, reply, called) {
|
|
|
41
48
|
if (!table && !id) {
|
|
42
49
|
return reply.status(400).send("not enough params");
|
|
43
50
|
}
|
|
44
|
-
const { actions = [], query: accessQuery, message: accessMessage } = (await getAccess({
|
|
51
|
+
const { actions = [], query: accessQuery, message: accessMessage, } = (await getAccess({
|
|
52
|
+
resource,
|
|
45
53
|
table: templateName,
|
|
46
54
|
form,
|
|
47
55
|
id,
|
|
@@ -54,7 +62,8 @@ export default async function tableAPI(req, reply, called) {
|
|
|
54
62
|
code: 403,
|
|
55
63
|
});
|
|
56
64
|
}
|
|
57
|
-
if (!
|
|
65
|
+
if (!resource &&
|
|
66
|
+
!tokenData &&
|
|
58
67
|
!config?.local &&
|
|
59
68
|
!config.security?.disableToken &&
|
|
60
69
|
!called) {
|
|
@@ -83,9 +92,11 @@ export default async function tableAPI(req, reply, called) {
|
|
|
83
92
|
Object.hasOwn(schema[key], "colModel"));
|
|
84
93
|
// skip non-existing columns
|
|
85
94
|
const columnList = dbColumns.map((el) => el.name || el).join(",");
|
|
86
|
-
const
|
|
87
|
-
? await pg
|
|
88
|
-
|
|
95
|
+
const fields = !loadTable?.table
|
|
96
|
+
? await pg
|
|
97
|
+
.query(`select * from ${table} limit 0`)
|
|
98
|
+
.then((el) => el.fields || [])
|
|
99
|
+
: [];
|
|
89
100
|
const cols = loadTable?.table
|
|
90
101
|
? Object.keys(schema || {})
|
|
91
102
|
.filter((col) => columnList.includes(col) && !extraKeys.includes(col))
|
|
@@ -147,7 +158,9 @@ export default async function tableAPI(req, reply, called) {
|
|
|
147
158
|
.map((col) => col.name || col.key)
|
|
148
159
|
.join(",")} from ${extraTable} a where ${parentId}=$1`;
|
|
149
160
|
// console.log(table, formName, q1);
|
|
150
|
-
const
|
|
161
|
+
const extraRows = await pg
|
|
162
|
+
.query(q1, [id])
|
|
163
|
+
.then((el) => el.rows || []);
|
|
151
164
|
Object.assign(data, { [key]: extraRows });
|
|
152
165
|
}));
|
|
153
166
|
}
|
|
@@ -158,7 +171,7 @@ export default async function tableAPI(req, reply, called) {
|
|
|
158
171
|
data.token = tokenData?.table
|
|
159
172
|
? params.table
|
|
160
173
|
: setToken({
|
|
161
|
-
ids: [JSON.stringify({ id, table, form, obj })],
|
|
174
|
+
ids: [JSON.stringify({ id, table, form, obj, resource })],
|
|
162
175
|
uid: user.uid,
|
|
163
176
|
array: 1,
|
|
164
177
|
})?.[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/update.ts"],"names":[],"mappings":"AAgBA,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAgNxD"}
|
|
@@ -9,11 +9,12 @@ import validateData from "../../../plugins/crud/funcs/validateData.js";
|
|
|
9
9
|
import getAccess from "../../../plugins/crud/funcs/getAccess.js";
|
|
10
10
|
import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
11
11
|
import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
|
|
12
|
+
import { resources } from "../../../plugins/access/funcs/getResources.js";
|
|
12
13
|
import insert from "./insert.js";
|
|
13
14
|
export default async function update(req, reply) {
|
|
14
15
|
const { pg = pgClients.client, user, params = {}, body = {}, headers = {}, method, } = req;
|
|
15
16
|
const { referer } = headers;
|
|
16
|
-
const unittest = process.env.NODE_ENV ===
|
|
17
|
+
const unittest = process.env.NODE_ENV === "test" || process.env.VITEST;
|
|
17
18
|
if (!user) {
|
|
18
19
|
return reply.status(403).send({ error: "access restricted", code: 403 });
|
|
19
20
|
}
|
|
@@ -35,12 +36,19 @@ export default async function update(req, reply) {
|
|
|
35
36
|
mode: "w",
|
|
36
37
|
json: 1,
|
|
37
38
|
});
|
|
38
|
-
const
|
|
39
|
+
const resource = resources[hookData?.resource || tokenData?.resource || params.table]
|
|
40
|
+
? tokenData?.resource || params.table
|
|
41
|
+
: undefined;
|
|
42
|
+
const { form, table: edit, id, } = (resources[params.table]
|
|
43
|
+
? { table: resources[params.table], id: params.id }
|
|
44
|
+
: null) ||
|
|
45
|
+
hookData ||
|
|
39
46
|
tokenData ||
|
|
40
47
|
(config.security?.disableToken || config.local || config.auth?.disable
|
|
41
48
|
? params
|
|
42
49
|
: {});
|
|
43
50
|
const { actions = [], message: accessMessage } = (await getAccess({
|
|
51
|
+
resource,
|
|
44
52
|
table: edit,
|
|
45
53
|
form,
|
|
46
54
|
id,
|
|
@@ -53,7 +61,8 @@ export default async function update(req, reply) {
|
|
|
53
61
|
code: 403,
|
|
54
62
|
});
|
|
55
63
|
}
|
|
56
|
-
if (!
|
|
64
|
+
if (!resource &&
|
|
65
|
+
!tokenData &&
|
|
57
66
|
!config.local &&
|
|
58
67
|
!config.security?.disableToken &&
|
|
59
68
|
!config.auth?.disable) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function upload(req: any): Promise<
|
|
1
|
+
export default function upload(req: any, reply: any): Promise<any>;
|
|
2
2
|
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/upload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/upload.ts"],"names":[],"mappings":"AASA,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBA2ExD"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { logger, applyHook, pgClients, dataInsert } from "../../../../utils.js";
|
|
3
|
-
import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
|
|
4
|
-
export default async function upload(req) {
|
|
3
|
+
import { uploadMultiPart, } from "../../../plugins/file/uploadMultiPart.js";
|
|
4
|
+
export default async function upload(req, reply) {
|
|
5
5
|
const { pg = pgClients.client } = req;
|
|
6
|
+
const hookDataFile = (await applyHook("preUploadMultiPart", {
|
|
7
|
+
req,
|
|
8
|
+
}));
|
|
9
|
+
if (hookDataFile?.error) {
|
|
10
|
+
return reply
|
|
11
|
+
.status(hookDataFile?.code || 500)
|
|
12
|
+
.send({ error: hookDataFile.error, code: hookDataFile?.code || 500 });
|
|
13
|
+
}
|
|
14
|
+
if (hookDataFile) {
|
|
15
|
+
return hookDataFile;
|
|
16
|
+
}
|
|
6
17
|
const file = await uploadMultiPart(req);
|
|
7
18
|
const objectId = req.params["*"] || "uploads";
|
|
8
19
|
const hookData = await applyHook("preUpload", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAkFzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,YAAY,EACrB,QAAgB,GACjB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBA22Bb"}
|
|
@@ -18,6 +18,7 @@ import metaFormat from "../../../plugins/table/funcs/metaFormat/index.js";
|
|
|
18
18
|
import extraDataGet from "../../../plugins/extra/extraDataGet.js";
|
|
19
19
|
import locales from "../controllers/utils/locales.js";
|
|
20
20
|
import conditions from "../controllers/utils/conditions.js";
|
|
21
|
+
import { resources } from "../../../plugins/access/funcs/getResources.js";
|
|
21
22
|
const components = {
|
|
22
23
|
"vs-widget-file": "select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3",
|
|
23
24
|
"vs-widget-comments": "select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1",
|
|
@@ -85,7 +86,11 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
85
86
|
json: true,
|
|
86
87
|
});
|
|
87
88
|
const tokenData = tokenData1 || tokenData2;
|
|
88
|
-
const
|
|
89
|
+
const resource = resources[paramsTable] ? paramsTable : undefined;
|
|
90
|
+
const templateName = resources[paramsTable] ||
|
|
91
|
+
tokenData?.table ||
|
|
92
|
+
hookData?.table ||
|
|
93
|
+
paramsTable;
|
|
89
94
|
const loadTable = await getTemplate("table", templateName);
|
|
90
95
|
if (tokenData?.table && !loadTable) {
|
|
91
96
|
const { rows = [], fields = [] } = await pg.query(`select ${tokenData.columns || "*"} from ${tokenData.table} where ${tokenData.query || "true"} limit 10`);
|
|
@@ -104,9 +109,11 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
104
109
|
const sqlTable = filterSql
|
|
105
110
|
.map((el, i) => ` left join lateral (${el.sql}) ${el.name || `t${i}`} on 1=1 `)
|
|
106
111
|
?.join("") || "";
|
|
107
|
-
const d =
|
|
108
|
-
.
|
|
109
|
-
|
|
112
|
+
const d = pg
|
|
113
|
+
? await Promise.all(filterSql.map((el, i) => pg
|
|
114
|
+
.query(`select ${el.name || `t${i}`}.* from(select * from ${loadTable.table})t ${sqlTable} limit 0`)
|
|
115
|
+
.then((item) => item.fields)))
|
|
116
|
+
: [];
|
|
110
117
|
d.forEach((el, i) => {
|
|
111
118
|
filterSql[i].inline = el.length === 1;
|
|
112
119
|
filterSql[i].fields = el.map((f) => f.name);
|
|
@@ -137,6 +144,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
137
144
|
message: undefined,
|
|
138
145
|
}
|
|
139
146
|
: (await getAccess({
|
|
147
|
+
resource,
|
|
140
148
|
table: templateName,
|
|
141
149
|
id: objectId,
|
|
142
150
|
user,
|
|
@@ -150,7 +158,11 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
150
158
|
}
|
|
151
159
|
// const body = loadTable || hookData || tokenData;
|
|
152
160
|
const { table: table1, columns = [], sql, cardSql, form, meta, sqlColumns, editable = false, } = loadTable || hookData || tokenData || params || { table };
|
|
153
|
-
const ispublic = loadTable?.public ||
|
|
161
|
+
const ispublic = loadTable?.public ||
|
|
162
|
+
hookData?.public ||
|
|
163
|
+
tokenData?.public ||
|
|
164
|
+
params?.public ||
|
|
165
|
+
false;
|
|
154
166
|
if (!ispublic && !user?.uid && !called) {
|
|
155
167
|
return reply.status(401).send({ error: "unauthorized", code: 401 });
|
|
156
168
|
}
|
|
@@ -596,6 +608,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
596
608
|
format: timeArr[5] - timeArr[4],
|
|
597
609
|
},
|
|
598
610
|
route,
|
|
611
|
+
resource,
|
|
599
612
|
public: ispublic,
|
|
600
613
|
tokens,
|
|
601
614
|
card: !!(loadTable?.card ?? (await getTemplate("card", templateName))),
|
package/dist/utils.d.ts
CHANGED
|
@@ -66,7 +66,7 @@ export { default as unflattenObject } from "./server/plugins/util/funcs/unflatte
|
|
|
66
66
|
export { default as isFileExists } from "./server/plugins/file/isFileExists.js";
|
|
67
67
|
export { default as downloadFile } from "./server/plugins/file/downloadFile.js";
|
|
68
68
|
export { default as uploadFile } from "./server/plugins/file/uploadFile.js";
|
|
69
|
-
export {
|
|
69
|
+
export { uploadMultiPart } from "./server/plugins/file/uploadMultiPart.js";
|
|
70
70
|
export { default as getMimeType } from "./server/plugins/file/providers/mime/index.js";
|
|
71
71
|
export { default as getFileType } from "./server/plugins/file/utils/getFileType.js";
|
|
72
72
|
export { default as allowedExtensions } from "./server/plugins/file/utils/allowedExtensions.js";
|
|
@@ -77,6 +77,8 @@ export { default as getExport } from "./server/plugins/file/getExport.js";
|
|
|
77
77
|
export { default as jsonToCsv } from "./server/routes/file/controllers/utils/jsonToCsv.js";
|
|
78
78
|
export { default as jsonToXls } from "./server/routes/file/controllers/utils/jsonToXls.js";
|
|
79
79
|
export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdminAccess.js";
|
|
80
|
+
export { default as getUserPermissions } from "./server/plugins/access/funcs/getUserPermissions.js";
|
|
81
|
+
export { resourcesList, publicResourcesList, } from "./server/plugins/access/funcs/getResources.js";
|
|
80
82
|
export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js";
|
|
81
83
|
export { default as addUserNotification } from "./server/plugins/notifications/addNotification.js";
|
|
82
84
|
export { addUserCls, editUserCls, deleteUserCls, getUserCls, getUserClsList, } from "./server/plugins/usercls/index.js";
|
|
@@ -87,7 +89,6 @@ export { default as uploadChunk } from "./server/plugins/upload/uploadChunk.js";
|
|
|
87
89
|
export { default as s3Client } from "./server/plugins/file/providers/s3/client.js";
|
|
88
90
|
export { default as dumpDatabase } from "./script/dump.js";
|
|
89
91
|
export { default as migrate } from "./script/migrate.js";
|
|
90
|
-
export { default as getUserPermissions } from "./server/plugins/auth/funcs/getUserPermissions.js";
|
|
91
92
|
declare const _default: null;
|
|
92
93
|
export default _default;
|
|
93
94
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -82,7 +82,7 @@ export { default as unflattenObject } from "./server/plugins/util/funcs/unflatte
|
|
|
82
82
|
export { default as isFileExists } from "./server/plugins/file/isFileExists.js";
|
|
83
83
|
export { default as downloadFile } from "./server/plugins/file/downloadFile.js";
|
|
84
84
|
export { default as uploadFile } from "./server/plugins/file/uploadFile.js";
|
|
85
|
-
export {
|
|
85
|
+
export { uploadMultiPart } from "./server/plugins/file/uploadMultiPart.js";
|
|
86
86
|
export { default as getMimeType } from "./server/plugins/file/providers/mime/index.js";
|
|
87
87
|
export { default as getFileType } from "./server/plugins/file/utils/getFileType.js";
|
|
88
88
|
export { default as allowedExtensions } from "./server/plugins/file/utils/allowedExtensions.js";
|
|
@@ -94,6 +94,8 @@ export { default as getExport } from "./server/plugins/file/getExport.js";
|
|
|
94
94
|
export { default as jsonToCsv } from "./server/routes/file/controllers/utils/jsonToCsv.js";
|
|
95
95
|
export { default as jsonToXls } from "./server/routes/file/controllers/utils/jsonToXls.js";
|
|
96
96
|
export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdminAccess.js";
|
|
97
|
+
export { default as getUserPermissions } from "./server/plugins/access/funcs/getUserPermissions.js";
|
|
98
|
+
export { resourcesList, publicResourcesList, } from "./server/plugins/access/funcs/getResources.js";
|
|
97
99
|
export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js"; // email
|
|
98
100
|
export { default as addUserNotification } from "./server/plugins/notifications/addNotification.js"; // popup, widget, interface etc.
|
|
99
101
|
export { addUserCls, editUserCls, deleteUserCls, getUserCls, getUserClsList, } from "./server/plugins/usercls/index.js";
|
|
@@ -105,5 +107,4 @@ export { default as s3Client } from "./server/plugins/file/providers/s3/client.j
|
|
|
105
107
|
// scripts
|
|
106
108
|
export { default as dumpDatabase } from "./script/dump.js";
|
|
107
109
|
export { default as migrate } from "./script/migrate.js";
|
|
108
|
-
export { default as getUserPermissions } from "./server/plugins/auth/funcs/getUserPermissions.js";
|
|
109
110
|
export default null;
|