@opengis/admin 0.3.24 → 0.3.26

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 (202) hide show
  1. package/README.md +97 -97
  2. package/config.js +4 -4
  3. package/dist/{add-page-CY3jyjng.js → add-page-B3H-0GBH.js} +25 -20
  4. package/dist/{admin-interface-B09NhAi-.js → admin-interface-CpMI-QOq.js} +502 -481
  5. package/dist/{admin-view-obFqHA0_.js → admin-view-BuCmto5A.js} +8 -8
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +76 -76
  8. package/dist/assets/logo.svg +41 -41
  9. package/dist/{card-view-CAnhvY0b.js → card-view-C4EvhyJT.js} +3 -3
  10. package/dist/edit-page-Bk2BoWiz.js +145 -0
  11. package/dist/{import-file-DAyouRPm.js → import-file-DoPKjOx2.js} +21832 -21926
  12. package/dist/{profile-page-Cm3oX_ZN.js → profile-page-D2CDkSuS.js} +5 -5
  13. package/dist/style.css +1 -1
  14. package/module/settings/card/admin.accounts.table/index.yml +7 -7
  15. package/module/settings/card/admin.accounts.table/rules.hbs +18 -18
  16. package/module/settings/card/admin.accounts.table/users.hbs +13 -13
  17. package/module/settings/card/admin.roles.table/access.hbs +11 -11
  18. package/module/settings/card/admin.roles.table/general_info.hbs +9 -9
  19. package/module/settings/card/admin.roles.table/index.yml +22 -22
  20. package/module/settings/card/admin.roles.table/users.hbs +12 -12
  21. package/module/settings/card/admin.routes.table/general_info.hbs +13 -13
  22. package/module/settings/card/admin.routes.table/groups.hbs +11 -11
  23. package/module/settings/card/admin.routes.table/index.yml +15 -15
  24. package/module/settings/card/admin.routes.table/users.hbs +16 -16
  25. package/module/settings/card/admin.table_properties.table/custom_columns.hbs +22 -22
  26. package/module/settings/card/admin.table_properties.table/index.yml +12 -12
  27. package/module/settings/card/admin.table_properties.table/info.hbs +17 -17
  28. package/module/settings/card/admin.users.table/general_info.hbs +18 -18
  29. package/module/settings/card/admin.users.table/index.yml +20 -20
  30. package/module/settings/card/admin.users.table/last_login.hbs +17 -17
  31. package/module/settings/card/admin.users.table/logs.hbs +16 -16
  32. package/module/settings/card/admin.users.table/routes.hbs +13 -13
  33. package/module/settings/card/admin.users.table/user_roles.hbs +35 -35
  34. package/module/settings/cls/change_type.json +13 -13
  35. package/module/settings/cls/core.actions.json +17 -17
  36. package/module/settings/cls/core.column_type.json +14 -14
  37. package/module/settings/cls/core.scope.json +13 -13
  38. package/module/settings/cls/properties.site_status.json +13 -13
  39. package/module/settings/cls/properties.widget_status.json +13 -13
  40. package/module/settings/cls/users.user_type.json +13 -13
  41. package/module/settings/cls/yes_no.json +11 -11
  42. package/module/settings/form/admin.accounts.form.json +13 -13
  43. package/module/settings/form/admin.custom_column.form.json +55 -55
  44. package/module/settings/form/admin.properties.form.json +15 -15
  45. package/module/settings/form/admin.roles.form.json +21 -21
  46. package/module/settings/form/admin.routes.form.json +25 -25
  47. package/module/settings/form/admin.rules.form.json +30 -30
  48. package/module/settings/form/admin.table_properties.form.json +19 -19
  49. package/module/settings/form/admin.user_properties.form.json +15 -15
  50. package/module/settings/form/admin.user_roles.form.json +24 -24
  51. package/module/settings/form/admin.user_roles_card.form.json +13 -13
  52. package/module/settings/form/admin.users.form.json +177 -177
  53. package/module/settings/form/admin.users_edit.form.json +145 -145
  54. package/module/settings/form/context.account_grants.form.json +24 -24
  55. package/module/settings/form/context.account_users.form.json +12 -12
  56. package/module/settings/form/user.user_roles.form.json +13 -13
  57. package/module/settings/interface/admin.properties.json +4 -4
  58. package/module/settings/interface/admin.roles.json +4 -4
  59. package/module/settings/interface/admin.routes.json +4 -4
  60. package/module/settings/interface/admin.users.json +4 -4
  61. package/module/settings/menu.json +72 -72
  62. package/module/settings/select/core.routes.sql +1 -1
  63. package/module/settings/select/core.user_mentioned.sql +1 -1
  64. package/module/settings/select/core.user_uid.sql +1 -1
  65. package/module/settings/table/admin.accounts.table.json +49 -49
  66. package/module/settings/table/admin.custom_column.table.json +100 -100
  67. package/module/settings/table/admin.properties.table.json +39 -39
  68. package/module/settings/table/admin.roles.table.json +77 -77
  69. package/module/settings/table/admin.routes.table.json +73 -73
  70. package/module/settings/table/admin.rules.table.json +77 -77
  71. package/module/settings/table/admin.table_properties.table.json +37 -37
  72. package/module/settings/table/admin.user_properties.table.json +34 -34
  73. package/module/settings/table/admin.user_roles.table.json +74 -74
  74. package/module/settings/table/admin.users.table.json +135 -135
  75. package/module/settings/table/context.account_grants.table.json +88 -88
  76. package/module/settings/table/context.account_users.table.json +53 -53
  77. package/module/settings/table/log.table_changes.table.json +100 -100
  78. package/package.json +102 -102
  79. package/plugin.js +30 -30
  80. package/server/helpers/core/badge.js +16 -16
  81. package/server/helpers/core/buttonHelper.js +21 -21
  82. package/server/helpers/core/coalesce.js +7 -7
  83. package/server/helpers/core/select.js +48 -48
  84. package/server/helpers/core/token.js +18 -18
  85. package/server/helpers/index.js +40 -40
  86. package/server/helpers/list/buttonHelper.js +21 -21
  87. package/server/helpers/list/descriptionList.js +45 -45
  88. package/server/helpers/list/tableList.js +82 -82
  89. package/server/helpers/list/utils/buttonDel.js +12 -12
  90. package/server/helpers/list/utils/buttonEdit.js +14 -14
  91. package/server/helpers/temp/contentList.js +58 -58
  92. package/server/helpers/temp/ifCond.js +101 -101
  93. package/server/helpers/utils/button.js +5 -5
  94. package/server/helpers/utils/buttonAdd.js +6 -6
  95. package/server/helpers/utils/buttonDel.js +6 -6
  96. package/server/helpers/utils/buttonEdit.js +5 -5
  97. package/server/helpers/utils/mdToHTML.js +17 -17
  98. package/server/helpers/utils/paddingNumber.js +3 -3
  99. package/server/plugins/access/funcs/getAdminAccess.js +12 -12
  100. package/server/plugins/access/index.mjs +6 -6
  101. package/server/plugins/adminHook.js +81 -81
  102. package/server/plugins/cron.js +10 -10
  103. package/server/plugins/docs.js +28 -28
  104. package/server/plugins/hook.js +276 -276
  105. package/server/plugins/vite.js +77 -77
  106. package/server/routes/access/controllers/access.group.js +29 -29
  107. package/server/routes/access/controllers/access.group.post.js +54 -54
  108. package/server/routes/access/controllers/access.interface.js +33 -33
  109. package/server/routes/access/index.mjs +11 -11
  110. package/server/routes/access/schema.mjs +67 -67
  111. package/server/routes/calendar/controllers/calendar.data.js +125 -125
  112. package/server/routes/calendar/index.mjs +7 -7
  113. package/server/routes/calendar/schema.js +21 -21
  114. package/server/routes/data/controllers/cardData.js +127 -127
  115. package/server/routes/data/controllers/cardTabData.js +49 -49
  116. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  117. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  118. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  119. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  120. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  121. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  122. package/server/routes/data/controllers/tableData.js +31 -31
  123. package/server/routes/data/controllers/tableDataId.js +27 -27
  124. package/server/routes/data/controllers/tableFilter.js +9 -9
  125. package/server/routes/data/controllers/tableInfo.js +112 -112
  126. package/server/routes/data/controllers/tokenInfo.js +9 -9
  127. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  128. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  129. package/server/routes/data/index.mjs +20 -20
  130. package/server/routes/data/schema.js +54 -54
  131. package/server/routes/dblist/controllers/readItems.js +20 -20
  132. package/server/routes/dblist/controllers/setItem.js +22 -22
  133. package/server/routes/dblist/index.mjs +18 -18
  134. package/server/routes/dblist/utils/formatData.js +7 -7
  135. package/server/routes/menu/controllers/getMenu.js +77 -77
  136. package/server/routes/menu/controllers/interfaces.js +20 -20
  137. package/server/routes/menu/index.mjs +7 -7
  138. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  139. package/server/routes/notifications/controllers/testEmail.js +35 -35
  140. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  141. package/server/routes/notifications/funcs/addNotification.js +21 -21
  142. package/server/routes/notifications/funcs/sendNotification.js +92 -92
  143. package/server/routes/notifications/hook/onWidgetSet.js +56 -56
  144. package/server/routes/notifications/index.mjs +26 -26
  145. package/server/routes/notifications/schema.js +16 -16
  146. package/server/routes/print/controllers/cardPrint.js +135 -135
  147. package/server/routes/print/controllers/printTemplate.add.js +37 -37
  148. package/server/routes/print/controllers/printTemplate.delete.js +29 -29
  149. package/server/routes/print/controllers/printTemplate.edit.js +42 -42
  150. package/server/routes/print/controllers/printTemplate.js +67 -67
  151. package/server/routes/print/controllers/printTemplateList.js +19 -19
  152. package/server/routes/print/controllers/printTemplatePreview.js +87 -87
  153. package/server/routes/print/index.mjs +19 -19
  154. package/server/routes/properties/controllers/admin.properties.get.js +31 -31
  155. package/server/routes/properties/controllers/table.properties.get.js +120 -120
  156. package/server/routes/properties/controllers/table.properties.post.js +115 -115
  157. package/server/routes/properties/controllers/user.properties.get.js +19 -19
  158. package/server/routes/properties/controllers/user.properties.post.js +10 -10
  159. package/server/routes/properties/index.mjs +21 -21
  160. package/server/routes/properties/schema.js +10 -10
  161. package/server/routes/properties/utils/dataInsert.js +26 -26
  162. package/server/routes/properties/utils/getColumnMetaData.js +17 -17
  163. package/server/routes/properties/utils/refreshData.js +128 -128
  164. package/server/routes/report/controllers/data.js +76 -76
  165. package/server/routes/report/controllers/list.js +18 -18
  166. package/server/routes/report/index.mjs +7 -7
  167. package/server/routes/report/utils/formatValue.js +179 -179
  168. package/server/routes/report/utils/getFilterQuery.js +67 -67
  169. package/server/routes/root.mjs +3 -3
  170. package/server/routes/templates/controllers/getTemplate.js +44 -44
  171. package/server/routes/templates/index.mjs +16 -16
  172. package/server/routes/templates/schema.js +8 -8
  173. package/server/routes/user/controllers/user.cls.id.js +14 -14
  174. package/server/routes/user/controllers/user.cls.js +72 -72
  175. package/server/routes/user/controllers/user.cls.post.js +54 -54
  176. package/server/routes/user/controllers/user.info.js +17 -17
  177. package/server/routes/user/schema.js +14 -14
  178. package/server/routes/util/controllers/code.generator.js +89 -89
  179. package/server/routes/util/index.mjs +5 -5
  180. package/server/routes/widget/controllers/widget.del.js +63 -63
  181. package/server/routes/widget/controllers/widget.get.js +125 -125
  182. package/server/routes/widget/controllers/widget.set.js +84 -84
  183. package/server/routes/widget/hook/onWidgetSet.js +12 -12
  184. package/server/routes/widget/index.mjs +16 -16
  185. package/server/routes/widget/schema.js +12 -12
  186. package/server/templates/cls/itree.recrzone_category.json +73 -73
  187. package/server/templates/cls/test.json +9 -9
  188. package/server/templates/form/admin.profile.form.json +31 -31
  189. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  190. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  191. package/server/templates/form/cp_building.form.json +32 -32
  192. package/server/templates/form/form-user-pass.json +10 -10
  193. package/server/templates/form/form-user_group.json +39 -39
  194. package/server/templates/form/form-users.json +156 -156
  195. package/server/templates/form/user_group_access.form.json +22 -22
  196. package/server/templates/pt/card-print.pt.hbs +245 -245
  197. package/server/templates/select/account_id.json +2 -2
  198. package/server/templates/table/gis.dataset.table.json +43 -43
  199. package/server/templates/table/management.user_group.table.json +112 -112
  200. package/server/templates/table/management.users.table.json +126 -126
  201. package/utils.js +26 -26
  202. package/dist/edit-page-DOpbSZWg.js +0 -140
@@ -1,77 +1,77 @@
1
- import fs from 'fs';
2
- import path, { dirname } from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const dir = dirname(fileURLToPath(import.meta.url));
6
- const root = `${dir}/../..`;
7
- import { config } from '@opengis/fastify-table/utils.js';
8
-
9
- const isProduction = process.env.NODE_ENV === 'production' || config.production;
10
-
11
- async function plugin(fastify) {
12
- // vite server
13
- if (!isProduction) {
14
- const vite = await import('vite');
15
-
16
- const viteServer = await vite.createServer({
17
- server: {
18
- middlewareMode: true,
19
- },
20
- });
21
- // hot reload
22
- viteServer.watcher.on('all', function (d, t) {
23
- if (!t.includes('module')) return;
24
- console.log(d, t);
25
- viteServer.ws.send({ type: 'full-reload' });
26
- });
27
-
28
- // this is middleware for vite's dev servert
29
- fastify.addHook('onRequest', async (req, reply) => {
30
- const { user } = req.session?.passport || {};
31
-
32
- if (!user && req.url.startsWith('/login')) {
33
- return reply.redirect(`/login?redirect=${req.url}`);
34
- }
35
-
36
- const next = () => new Promise((resolve) => {
37
- viteServer.middlewares(req.raw, reply.raw, () => resolve());
38
- });
39
- await next();
40
- });
41
- fastify.get('*', async () => { });
42
- return;
43
- }
44
-
45
- // From Build
46
- fastify.get('*', async (req, reply) => {
47
- const { user } = req.session?.passport || {};
48
-
49
- if (!user && req.url.startsWith('/login')) {
50
- return reply.redirect(`/login?redirect=${req.url}`);
51
- }
52
- const stream = fs.createReadStream('dist/index.html');
53
- return reply.type('text/html').send(stream);
54
- });
55
-
56
- const fileSize = {}
57
- async function staticFile(req, reply) {
58
- const assetsDir = 'dist';
59
- const filePath = path.join(root, assetsDir, req.url);
60
- const ext = path.extname(filePath);
61
-
62
- if (!fs.existsSync(filePath)) return { status: 404, message: 'not found' }
63
- fileSize[filePath] = fileSize[filePath] || fs.statSync(filePath).size;
64
- const mime = {
65
- '.js': 'text/javascript', '.css': 'text/css', '.woff2': 'application/font-woff', '.png': 'image/png', '.svg': 'image/svg+xml', '.jpg': 'image/jpg',
66
- }[ext];
67
- reply.headers({ 'Cache-control': 'max-age=3600, public', 'Content-length': fileSize[filePath], 'Content-Encoding': 'identity' });
68
-
69
- const stream = fs.createReadStream(filePath);
70
- return mime ? reply.type(mime).send(stream) : stream;
71
- }
72
-
73
- fastify.get('/assets/*', staticFile);
74
- fastify.get('/public/*', staticFile);
75
- }
76
-
77
- export default plugin;
1
+ import fs from 'fs';
2
+ import path, { dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const dir = dirname(fileURLToPath(import.meta.url));
6
+ const root = `${dir}/../..`;
7
+ import { config } from '@opengis/fastify-table/utils.js';
8
+
9
+ const isProduction = process.env.NODE_ENV === 'production' || config.production;
10
+
11
+ async function plugin(fastify) {
12
+ // vite server
13
+ if (!isProduction) {
14
+ const vite = await import('vite');
15
+
16
+ const viteServer = await vite.createServer({
17
+ server: {
18
+ middlewareMode: true,
19
+ },
20
+ });
21
+ // hot reload
22
+ viteServer.watcher.on('all', function (d, t) {
23
+ if (!t.includes('module')) return;
24
+ console.log(d, t);
25
+ viteServer.ws.send({ type: 'full-reload' });
26
+ });
27
+
28
+ // this is middleware for vite's dev servert
29
+ fastify.addHook('onRequest', async (req, reply) => {
30
+ const { user } = req.session?.passport || {};
31
+
32
+ if (!user && req.url.startsWith('/login')) {
33
+ return reply.redirect(`/login?redirect=${req.url}`);
34
+ }
35
+
36
+ const next = () => new Promise((resolve) => {
37
+ viteServer.middlewares(req.raw, reply.raw, () => resolve());
38
+ });
39
+ await next();
40
+ });
41
+ fastify.get('*', async () => { });
42
+ return;
43
+ }
44
+
45
+ // From Build
46
+ fastify.get('*', async (req, reply) => {
47
+ const { user } = req.session?.passport || {};
48
+
49
+ if (!user && req.url.startsWith('/login')) {
50
+ return reply.redirect(`/login?redirect=${req.url}`);
51
+ }
52
+ const stream = fs.createReadStream('dist/index.html');
53
+ return reply.type('text/html').send(stream);
54
+ });
55
+
56
+ const fileSize = {}
57
+ async function staticFile(req, reply) {
58
+ const assetsDir = 'dist';
59
+ const filePath = path.join(root, assetsDir, req.url);
60
+ const ext = path.extname(filePath);
61
+
62
+ if (!fs.existsSync(filePath)) return { status: 404, message: 'not found' }
63
+ fileSize[filePath] = fileSize[filePath] || fs.statSync(filePath).size;
64
+ const mime = {
65
+ '.js': 'text/javascript', '.css': 'text/css', '.woff2': 'application/font-woff', '.png': 'image/png', '.svg': 'image/svg+xml', '.jpg': 'image/jpg',
66
+ }[ext];
67
+ reply.headers({ 'Cache-control': 'max-age=3600, public', 'Content-length': fileSize[filePath], 'Content-Encoding': 'identity' });
68
+
69
+ const stream = fs.createReadStream(filePath);
70
+ return mime ? reply.type(mime).send(stream) : stream;
71
+ }
72
+
73
+ fastify.get('/assets/*', staticFile);
74
+ fastify.get('/public/*', staticFile);
75
+ }
76
+
77
+ export default plugin;
@@ -1,30 +1,30 @@
1
- import { pgClients } from '@opengis/fastify-table/utils.js';
2
-
3
- import { getAdminAccess } from '../../../../utils.js';
4
-
5
- export default async function accessGroup({
6
- pg = pgClients.client, params = {}, session = {},
7
- }) {
8
- const { user = {} } = session?.passport || {};
9
-
10
- if (!params?.id) {
11
- return { message: 'not enough params: id', status: 400 };
12
- }
13
-
14
- // restrict access - admin only
15
- const check = await getAdminAccess({
16
- id: params.id, user,
17
- });
18
- if (check) return check;
19
-
20
- const { rows: routes = [] } = await pg.query(`select a.route_id as path, b.actions from admin.routes a
21
- left join admin.role_access b on a.route_id=b.route_id
22
- where b.role_id=$1`, [params.id]);
23
-
24
- const { rows: users = [] } = await pg.query(`select user_uid as id, user_name as name, access_granted,
25
- b.cdate as user_created, b.last_activity_date as last_activity from admin.user_roles a
26
- left join admin.users b on a.user_uid=b.uid
27
- where a.role_id=$1`, [params.id]);
28
-
29
- return { routes, users };
1
+ import { pgClients } from '@opengis/fastify-table/utils.js';
2
+
3
+ import { getAdminAccess } from '../../../../utils.js';
4
+
5
+ export default async function accessGroup({
6
+ pg = pgClients.client, params = {}, session = {},
7
+ }) {
8
+ const { user = {} } = session?.passport || {};
9
+
10
+ if (!params?.id) {
11
+ return { message: 'not enough params: id', status: 400 };
12
+ }
13
+
14
+ // restrict access - admin only
15
+ const check = await getAdminAccess({
16
+ id: params.id, user,
17
+ });
18
+ if (check) return check;
19
+
20
+ const { rows: routes = [] } = await pg.query(`select a.route_id as path, b.actions from admin.routes a
21
+ left join admin.role_access b on a.route_id=b.route_id
22
+ where b.role_id=$1`, [params.id]);
23
+
24
+ const { rows: users = [] } = await pg.query(`select user_uid as id, user_name as name, access_granted,
25
+ b.cdate as user_created, b.last_activity_date as last_activity from admin.user_roles a
26
+ left join admin.users b on a.user_uid=b.uid
27
+ where a.role_id=$1`, [params.id]);
28
+
29
+ return { routes, users };
30
30
  }
@@ -1,55 +1,55 @@
1
- import { pgClients } from '@opengis/fastify-table/utils.js';
2
-
3
- import { getAdminAccess } from '../../../../utils.js';
4
- import accessGroup from './access.group.js';
5
-
6
- export default async function accessGroupPost({
7
- pg = pgClients.client, params = {}, session = {}, body = {},
8
- }) {
9
- const { id } = params;
10
- const { user } = session?.passport || {};
11
- if (!user) return { status: 403, message: 'access restricted' }
12
-
13
- // restrict access - admin only
14
- const check = await getAdminAccess({ id, user });
15
- if (check) return check;
16
-
17
- const { users = [], routes = [] } = body;
18
-
19
- if (!routes?.length) {
20
- // return { message: 'not enough params: users / routes', status: 400 };
21
- await pg.query(`delete from admin.role_access where role_id=$1`, [id]);
22
-
23
- if (!users?.length) {
24
- return { message: { id, routes }, status: 200 };
25
- }
26
- }
27
-
28
- if (routes?.length) {
29
- const { routesDB = [] } = await pg.query('select array_agg(route_id) as "routesDB" from admin.routes where enabled')
30
- .then((res1) => res1.rows?.[0] || {});
31
- await pg.query(`delete from admin.role_access where role_id=$1;`, [id]);
32
-
33
-
34
- const q = `insert into admin.role_access(role_id,route_id,actions) values ($1,$2,$3)`;
35
- await Promise.all(routes.filter(el => routesDB.includes(el.path) && el.actions).map(el => pg.query(q, [id, el.path, el.actions])))
36
-
37
- const { rows } = await pg.query(`select a.route_id as path, b.actions as actions from admin.routes a
38
- left join admin.role_access b on a.route_id=b.route_id
39
- where b.role_id=$1`, [id]);
40
-
41
- if (!users?.length) {
42
- return { message: { id, routes: rows }, status: 200 };
43
- }
44
- }
45
-
46
- const q = `delete from admin.user_roles where role_id='${id.replace(/'/g, "''")}';
47
- insert into admin.user_roles(role_id,user_uid,access_granted)
48
- values ${users.filter((el) => el?.id).map((el) => `('${id.replace(/'/g, "''")}','${el.id.replace(/'/g, "''")}','${uid?.replace(/'/g, "''")}')`)}`;
49
-
50
- await pg.query(q);
51
-
52
- const res = await accessGroup({ pg, params, session });
53
-
54
- return res;
1
+ import { pgClients } from '@opengis/fastify-table/utils.js';
2
+
3
+ import { getAdminAccess } from '../../../../utils.js';
4
+ import accessGroup from './access.group.js';
5
+
6
+ export default async function accessGroupPost({
7
+ pg = pgClients.client, params = {}, session = {}, body = {},
8
+ }) {
9
+ const { id } = params;
10
+ const { user } = session?.passport || {};
11
+ if (!user) return { status: 403, message: 'access restricted' }
12
+
13
+ // restrict access - admin only
14
+ const check = await getAdminAccess({ id, user });
15
+ if (check) return check;
16
+
17
+ const { users = [], routes = [] } = body;
18
+
19
+ if (!routes?.length) {
20
+ // return { message: 'not enough params: users / routes', status: 400 };
21
+ await pg.query(`delete from admin.role_access where role_id=$1`, [id]);
22
+
23
+ if (!users?.length) {
24
+ return { message: { id, routes }, status: 200 };
25
+ }
26
+ }
27
+
28
+ if (routes?.length) {
29
+ const { routesDB = [] } = await pg.query('select array_agg(route_id) as "routesDB" from admin.routes where enabled')
30
+ .then((res1) => res1.rows?.[0] || {});
31
+ await pg.query(`delete from admin.role_access where role_id=$1;`, [id]);
32
+
33
+
34
+ const q = `insert into admin.role_access(role_id,route_id,actions) values ($1,$2,$3)`;
35
+ await Promise.all(routes.filter(el => routesDB.includes(el.path) && el.actions).map(el => pg.query(q, [id, el.path, el.actions])))
36
+
37
+ const { rows } = await pg.query(`select a.route_id as path, b.actions as actions from admin.routes a
38
+ left join admin.role_access b on a.route_id=b.route_id
39
+ where b.role_id=$1`, [id]);
40
+
41
+ if (!users?.length) {
42
+ return { message: { id, routes: rows }, status: 200 };
43
+ }
44
+ }
45
+
46
+ const q = `delete from admin.user_roles where role_id='${id.replace(/'/g, "''")}';
47
+ insert into admin.user_roles(role_id,user_uid,access_granted)
48
+ values ${users.filter((el) => el?.id).map((el) => `('${id.replace(/'/g, "''")}','${el.id.replace(/'/g, "''")}','${uid?.replace(/'/g, "''")}')`)}`;
49
+
50
+ await pg.query(q);
51
+
52
+ const res = await accessGroup({ pg, params, session });
53
+
54
+ return res;
55
55
  }
@@ -1,34 +1,34 @@
1
- import { pgClients, metaFormat } from '@opengis/fastify-table/utils.js';
2
- import { getAdminAccess } from '../../../../utils.js';
3
-
4
- const q = `select a.route_id as id, coalesce(b.user_uid, d.user_uid) as user_uid, coalesce(d.actions, b.actions, array['view']) as actions, b.scope, c.role_id
5
- from admin.routes a
6
- left join admin.role_access b on
7
- a.route_id=b.route_id
8
- left join admin.roles c on
9
- b.role_id=c.role_id
10
- and c.enabled
11
- left join admin.user_roles d on
12
- c.role_id=d.role_id
13
- and ( case when
14
- d.expiration is not null
15
- then d.expiration > CURRENT_DATE
16
- else 1=1
17
- end )
18
- where $1 in (a.route_id, a.alias, a.table_name) and coalesce(b.user_uid, d.user_uid) is not null`;
19
-
20
- export default async function accessInterface(req) {
21
- const { pg = pgClients.client, params = {}, user = {} } = req;
22
-
23
- // restrict access - admin only
24
- const check = await getAdminAccess({
25
- id: params.name, user,
26
- });
27
- if (check) return check;
28
-
29
- const { rows = [] } = await pg.query(q, [params.name]);
30
-
31
- const cls = { user_uid: 'core.user_uid', actions: 'core.actions', role_id: 'core.roles' };
32
- await metaFormat({ rows, cls, sufix: false });
33
- return { rows };
1
+ import { pgClients, metaFormat } from '@opengis/fastify-table/utils.js';
2
+ import { getAdminAccess } from '../../../../utils.js';
3
+
4
+ const q = `select a.route_id as id, coalesce(b.user_uid, d.user_uid) as user_uid, coalesce(d.actions, b.actions, array['view']) as actions, b.scope, c.role_id
5
+ from admin.routes a
6
+ left join admin.role_access b on
7
+ a.route_id=b.route_id
8
+ left join admin.roles c on
9
+ b.role_id=c.role_id
10
+ and c.enabled
11
+ left join admin.user_roles d on
12
+ c.role_id=d.role_id
13
+ and ( case when
14
+ d.expiration is not null
15
+ then d.expiration > CURRENT_DATE
16
+ else 1=1
17
+ end )
18
+ where $1 in (a.route_id, a.alias, a.table_name) and coalesce(b.user_uid, d.user_uid) is not null`;
19
+
20
+ export default async function accessInterface(req) {
21
+ const { pg = pgClients.client, params = {}, user = {} } = req;
22
+
23
+ // restrict access - admin only
24
+ const check = await getAdminAccess({
25
+ id: params.name, user,
26
+ });
27
+ if (check) return check;
28
+
29
+ const { rows = [] } = await pg.query(q, [params.name]);
30
+
31
+ const cls = { user_uid: 'core.user_uid', actions: 'core.actions', role_id: 'core.roles' };
32
+ await metaFormat({ rows, cls, sufix: false });
33
+ return { rows };
34
34
  }
@@ -1,11 +1,11 @@
1
- import accessGroup from "./controllers/access.group.js";
2
- import accessGroupPost from "./controllers/access.group.post.js";
3
- import accessInterface from "./controllers/access.interface.js";
4
-
5
- import { accessGroupPostSchema, accessGroupSchema, accessInterfaceSchema } from "./schema.mjs";
6
-
7
- export default async function route(fastify) {
8
- fastify.get('/access-group/:id', { schema: accessGroupSchema }, accessGroup);
9
- fastify.post('/access-group/:id', { schema: accessGroupPostSchema }, accessGroupPost);
10
- fastify.get('/access-interface/:name', { schema: accessInterfaceSchema }, accessInterface);
11
- }
1
+ import accessGroup from "./controllers/access.group.js";
2
+ import accessGroupPost from "./controllers/access.group.post.js";
3
+ import accessInterface from "./controllers/access.interface.js";
4
+
5
+ import { accessGroupPostSchema, accessGroupSchema, accessInterfaceSchema } from "./schema.mjs";
6
+
7
+ export default async function route(fastify) {
8
+ fastify.get('/access-group/:id', { schema: accessGroupSchema }, accessGroup);
9
+ fastify.post('/access-group/:id', { schema: accessGroupPostSchema }, accessGroupPost);
10
+ fastify.get('/access-interface/:name', { schema: accessInterfaceSchema }, accessInterface);
11
+ }
@@ -1,68 +1,68 @@
1
- export default null;
2
- export { accessGroupSchema, accessGroupPostSchema, accessInterfaceSchema }
3
-
4
- const accessGroupSchema = {
5
- params: {
6
- type: 'object',
7
- properties: {
8
- id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
9
- },
10
- required: ['id'],
11
- },
12
- };
13
-
14
- const accessInterfaceSchema = {
15
- params: {
16
- type: 'object',
17
- properties: {
18
- name: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
19
- },
20
- required: ['name'],
21
- },
22
- };
23
-
24
- const accessGroupPostSchema = {
25
- params: {
26
- type: 'object',
27
- properties: {
28
- id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
29
- },
30
- required: ['id'],
31
- },
32
- body: {
33
- type: 'object',
34
- properties: {
35
- users: {
36
- type: 'array',
37
- items: {
38
- type: 'object',
39
- properties: {
40
- id: {
41
- type: 'string',
42
- pattern: '^([\\d\\w._-]+)$',
43
- },
44
- },
45
- },
46
- },
47
- routes: {
48
- type: 'array',
49
- /*items: {
50
- type: 'object',
51
- properties: {
52
- path: {
53
- type: 'string',
54
- pattern: '^([\\d\\w._-]+)$',
55
- },
56
- actions: {
57
- type: 'array',
58
- items: {
59
- type: 'string',
60
- enum: ['get', 'add', 'edit', 'del'],
61
- },
62
- },
63
- },
64
- },*/
65
- },
66
- },
67
- },
1
+ export default null;
2
+ export { accessGroupSchema, accessGroupPostSchema, accessInterfaceSchema }
3
+
4
+ const accessGroupSchema = {
5
+ params: {
6
+ type: 'object',
7
+ properties: {
8
+ id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
9
+ },
10
+ required: ['id'],
11
+ },
12
+ };
13
+
14
+ const accessInterfaceSchema = {
15
+ params: {
16
+ type: 'object',
17
+ properties: {
18
+ name: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
19
+ },
20
+ required: ['name'],
21
+ },
22
+ };
23
+
24
+ const accessGroupPostSchema = {
25
+ params: {
26
+ type: 'object',
27
+ properties: {
28
+ id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
29
+ },
30
+ required: ['id'],
31
+ },
32
+ body: {
33
+ type: 'object',
34
+ properties: {
35
+ users: {
36
+ type: 'array',
37
+ items: {
38
+ type: 'object',
39
+ properties: {
40
+ id: {
41
+ type: 'string',
42
+ pattern: '^([\\d\\w._-]+)$',
43
+ },
44
+ },
45
+ },
46
+ },
47
+ routes: {
48
+ type: 'array',
49
+ /*items: {
50
+ type: 'object',
51
+ properties: {
52
+ path: {
53
+ type: 'string',
54
+ pattern: '^([\\d\\w._-]+)$',
55
+ },
56
+ actions: {
57
+ type: 'array',
58
+ items: {
59
+ type: 'string',
60
+ enum: ['get', 'add', 'edit', 'del'],
61
+ },
62
+ },
63
+ },
64
+ },*/
65
+ },
66
+ },
67
+ },
68
68
  };