@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.
Files changed (48) hide show
  1. package/dist/server/plugins/access/funcs/getResources.d.ts +7 -0
  2. package/dist/server/plugins/access/funcs/getResources.d.ts.map +1 -0
  3. package/dist/server/plugins/access/funcs/getResources.js +12 -0
  4. package/dist/server/plugins/access/funcs/getUserPermissions.d.ts +5 -0
  5. package/dist/server/plugins/access/funcs/getUserPermissions.d.ts.map +1 -0
  6. package/dist/server/plugins/access/funcs/getUserPermissions.js +36 -0
  7. package/dist/server/plugins/crud/funcs/dataInsert.d.ts.map +1 -1
  8. package/dist/server/plugins/crud/funcs/dataInsert.js +7 -1
  9. package/dist/server/plugins/crud/funcs/getAccess.d.ts +1 -1
  10. package/dist/server/plugins/crud/funcs/getAccess.d.ts.map +1 -1
  11. package/dist/server/plugins/crud/funcs/getAccess.js +20 -8
  12. package/dist/server/plugins/file/uploadMultiPart.d.ts +5 -3
  13. package/dist/server/plugins/file/uploadMultiPart.d.ts.map +1 -1
  14. package/dist/server/plugins/file/uploadMultiPart.js +2 -1
  15. package/dist/server/plugins/hook/applyHook.d.ts +1 -1
  16. package/dist/server/plugins/hook/applyHook.d.ts.map +1 -1
  17. package/dist/server/plugins/hook/applyHook.js +8 -2
  18. package/dist/server/plugins/policy/funcs/checkPermissions.js +2 -2
  19. package/dist/server/routes/access/controllers/access.resources.d.ts +6 -0
  20. package/dist/server/routes/access/controllers/access.resources.d.ts.map +1 -0
  21. package/dist/server/routes/access/controllers/access.resources.js +14 -0
  22. package/dist/server/routes/access/controllers/resources.d.ts +11 -0
  23. package/dist/server/routes/access/controllers/resources.d.ts.map +1 -0
  24. package/dist/server/routes/access/controllers/resources.js +14 -0
  25. package/dist/server/routes/access/functions/resources.d.ts +6 -0
  26. package/dist/server/routes/access/functions/resources.d.ts.map +1 -0
  27. package/dist/server/routes/access/functions/resources.js +11 -0
  28. package/dist/server/routes/access/index.d.ts +1 -1
  29. package/dist/server/routes/access/index.d.ts.map +1 -1
  30. package/dist/server/routes/access/index.js +3 -1
  31. package/dist/server/routes/auth/controllers/core/getUserInfo.js +2 -2
  32. package/dist/server/routes/crud/controllers/deleteCrud.d.ts.map +1 -1
  33. package/dist/server/routes/crud/controllers/deleteCrud.js +9 -3
  34. package/dist/server/routes/crud/controllers/insert.d.ts.map +1 -1
  35. package/dist/server/routes/crud/controllers/insert.js +9 -3
  36. package/dist/server/routes/crud/controllers/table.d.ts.map +1 -1
  37. package/dist/server/routes/crud/controllers/table.js +21 -8
  38. package/dist/server/routes/crud/controllers/update.d.ts.map +1 -1
  39. package/dist/server/routes/crud/controllers/update.js +12 -3
  40. package/dist/server/routes/file/controllers/upload.d.ts +1 -1
  41. package/dist/server/routes/file/controllers/upload.d.ts.map +1 -1
  42. package/dist/server/routes/file/controllers/upload.js +13 -2
  43. package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
  44. package/dist/server/routes/table/functions/getData.js +18 -5
  45. package/dist/utils.d.ts +3 -2
  46. package/dist/utils.d.ts.map +1 -1
  47. package/dist/utils.js +3 -2
  48. 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,5 @@
1
+ export default function getUserPermissions({ uid, resource }: {
2
+ uid?: string;
3
+ resource?: string;
4
+ }, pg?: any): Promise<any>;
5
+ //# sourceMappingURL=getUserPermissions.d.ts.map
@@ -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,gBA6JA"}
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 { ...res, id: id1, data: res.rows[0], ...res.rows[0] };
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,EAC/C,EAAE,MAAmB,sBAiGtB"}
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 "../../auth/funcs/getUserPermissions.js";
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", { table, user, pg, method });
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 permissions = await getUserPermissions(uid, pg).then((el) => (el || [])
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 default function uploadMultiPart(req: any, { extensions, raw, subdir, originalFilename, }?: {
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,UAAU,KAAK;IACb,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;CAC9B;AA2CD,wBAA8B,eAAe,CAC3C,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"}
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 default async function uploadMultiPart(req, { extensions, raw, subdir, originalFilename = false, } = {}) {
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":"AACA,wBAA8B,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,sBAqB3D"}
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 './hookList.js';
2
- export default async function applyHook(name, data) {
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 "../../auth/funcs/getUserPermissions.js";
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,6 @@
1
+ declare const arr: any;
2
+ declare const publicResources: any[];
3
+ declare const accessResources: (req?: any) => Promise<any[]>;
4
+ export { arr as resources, publicResources };
5
+ export default accessResources;
6
+ //# sourceMappingURL=access.resources.d.ts.map
@@ -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,6 @@
1
+ declare const resourcesList: any;
2
+ declare const publicResourcesList: any[];
3
+ export { resourcesList, publicResourcesList };
4
+ declare const _default: null;
5
+ export default _default;
6
+ //# sourceMappingURL=resources.d.ts.map
@@ -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":"AAeA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAE,GAAQ,QAsBxD"}
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/auth/funcs/getUserPermissions.js";
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;AAa5C,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAsIrE"}
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 { table: del, id = params.id, query, actions: actionsToken, } = hookData ||
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 (!tokenData &&
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;AAe5C,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAyMjE"}
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 { form, table: add } = hookData ||
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 (!tokenData &&
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;AAc5C,wBAA8B,QAAQ,CACpC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,GAAG,gBA0OZ"}
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 templateName = hookData?.table || tokenData?.table || params.table;
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 (!tokenData &&
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 { fields = [] } = !loadTable?.table
87
- ? await pg.query(`select * from ${table} limit 0`)
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 { rows: extraRows } = await pg.query(q1, [id]);
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":"AAeA,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAqMxD"}
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 === 'test' || process.env.VITEST;
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 { form, table: edit, id, } = hookData ||
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 (!tokenData &&
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":"AAMA,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,eA4D5C"}
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;AAgFzD,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,gBA61Bb"}
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 templateName = tokenData?.table || hookData?.table || paramsTable;
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 = await Promise.all(filterSql.map((el, i) => pg
108
- .query(`select ${el.name || `t${i}`}.* from(select * from ${loadTable.table})t ${sqlTable} limit 0`)
109
- .then((item) => item.fields)));
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 || hookData?.public || tokenData?.public || params?.public || false;
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 { default as uploadMultiPart } from "./server/plugins/file/uploadMultiPart.js";
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
@@ -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":"AAIA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAGvF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAGnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAGjF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAGtF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAG5E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,wCAAwC,CAAC;AAG5E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEpF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAEtF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAExF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAE7E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAG5F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAGhG,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qDAAqD,CAAC;AAE3F,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AACpG,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,+CAA+C,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAE9F,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAEnG,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,MAAM,IAAI,oBAAoB,EAC9B,OAAO,IAAI,kBAAkB,EAC7B,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAGnF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;;AAEzD,wBAAoB"}
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 { default as uploadMultiPart } from "./server/plugins/file/uploadMultiPart.js";
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.0.160",
3
+ "version": "2.0.162",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [