@baasix/baasix 0.1.34 → 0.1.35
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/app/404/index.html +1 -1
- package/dist/app/404.html +1 -1
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-9895483765b6dfd7.js +1 -0
- package/dist/app/_next/static/css/{d08072df3a043c8d.css → 8572ff91c3639efa.css} +1 -1
- package/dist/app/activity-log/all-activity/index.html +1 -1
- package/dist/app/activity-log/all-activity/index.txt +1 -1
- package/dist/app/activity-log/email-log/index.html +1 -1
- package/dist/app/activity-log/email-log/index.txt +1 -1
- package/dist/app/activity-log/index.html +1 -1
- package/dist/app/activity-log/index.txt +1 -1
- package/dist/app/activity-log/notifications/index.html +1 -1
- package/dist/app/activity-log/notifications/index.txt +1 -1
- package/dist/app/activity-log/sessions/index.html +1 -1
- package/dist/app/activity-log/sessions/index.txt +1 -1
- package/dist/app/activity-log/workflow-executions/index.html +1 -1
- package/dist/app/activity-log/workflow-executions/index.txt +1 -1
- package/dist/app/activity-log/workflow-logs/index.html +1 -1
- package/dist/app/activity-log/workflow-logs/index.txt +1 -1
- package/dist/app/change-password/index.html +1 -1
- package/dist/app/change-password/index.txt +1 -1
- package/dist/app/dashboard/index.html +1 -1
- package/dist/app/dashboard/index.txt +1 -1
- package/dist/app/data-browser/index.html +1 -1
- package/dist/app/data-browser/index.txt +1 -1
- package/dist/app/file-manager/index.html +1 -1
- package/dist/app/file-manager/index.txt +1 -1
- package/dist/app/forgot-password/index.html +1 -1
- package/dist/app/forgot-password/index.txt +1 -1
- package/dist/app/index.html +1 -1
- package/dist/app/index.txt +1 -1
- package/dist/app/login/index.html +1 -1
- package/dist/app/login/index.txt +1 -1
- package/dist/app/register/index.html +1 -1
- package/dist/app/register/index.txt +1 -1
- package/dist/app/settings/migrations/index.html +1 -1
- package/dist/app/settings/migrations/index.txt +1 -1
- package/dist/app/settings/permissions/index.html +1 -1
- package/dist/app/settings/permissions/index.txt +1 -1
- package/dist/app/settings/project/index.html +1 -1
- package/dist/app/settings/project/index.txt +1 -1
- package/dist/app/settings/roles/index.html +1 -1
- package/dist/app/settings/roles/index.txt +1 -1
- package/dist/app/settings/schema/index.html +1 -1
- package/dist/app/settings/schema/index.txt +2 -2
- package/dist/app/settings/tasks/index.html +1 -1
- package/dist/app/settings/tasks/index.txt +1 -1
- package/dist/app/settings/templates/edit/index.html +1 -1
- package/dist/app/settings/templates/edit/index.txt +1 -1
- package/dist/app/settings/templates/index.html +1 -1
- package/dist/app/settings/templates/index.txt +1 -1
- package/dist/app/settings/tenants/index.html +1 -1
- package/dist/app/settings/tenants/index.txt +1 -1
- package/dist/app/users/index.html +1 -1
- package/dist/app/users/index.txt +1 -1
- package/dist/app/users/invites/index.html +1 -1
- package/dist/app/users/invites/index.txt +1 -1
- package/dist/app/users/list/index.html +1 -1
- package/dist/app/users/list/index.txt +1 -1
- package/dist/app/users/preferences/index.html +1 -1
- package/dist/app/users/preferences/index.txt +1 -1
- package/dist/app/users/user-roles/index.html +1 -1
- package/dist/app/users/user-roles/index.txt +1 -1
- package/dist/app/workflows/detail/index.html +1 -1
- package/dist/app/workflows/detail/index.txt +1 -1
- package/dist/app/workflows/edit/index.html +1 -1
- package/dist/app/workflows/edit/index.txt +1 -1
- package/dist/app/workflows/execution/index.html +1 -1
- package/dist/app/workflows/execution/index.txt +1 -1
- package/dist/app/workflows/index.html +1 -1
- package/dist/app/workflows/index.txt +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -13
- package/dist/app.js.map +1 -1
- package/dist/auth/services/session.d.ts.map +1 -1
- package/dist/auth/services/session.js +7 -0
- package/dist/auth/services/session.js.map +1 -1
- package/dist/routes/permission.route.d.ts.map +1 -1
- package/dist/routes/permission.route.js +15 -22
- package/dist/routes/permission.route.js.map +1 -1
- package/dist/services/ItemsService.d.ts +4 -0
- package/dist/services/ItemsService.d.ts.map +1 -1
- package/dist/services/ItemsService.js +79 -126
- package/dist/services/ItemsService.js.map +1 -1
- package/dist/services/PermissionService.d.ts +9 -0
- package/dist/services/PermissionService.d.ts.map +1 -1
- package/dist/services/PermissionService.js +33 -0
- package/dist/services/PermissionService.js.map +1 -1
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +71 -53
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +15 -1
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +1 -0
- package/dist/utils/common.js.map +1 -1
- package/dist/utils/relationUtils.d.ts +17 -2
- package/dist/utils/relationUtils.d.ts.map +1 -1
- package/dist/utils/relationUtils.js +58 -103
- package/dist/utils/relationUtils.js.map +1 -1
- package/dist/utils/schemaManager.d.ts.map +1 -1
- package/dist/utils/schemaManager.js +11 -19
- package/dist/utils/schemaManager.js.map +1 -1
- package/dist/utils/tenantUtils.d.ts.map +1 -1
- package/dist/utils/tenantUtils.js +9 -9
- package/dist/utils/tenantUtils.js.map +1 -1
- package/package.json +1 -1
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-b1a7b169b91a3795.js +0 -1
- /package/dist/app/_next/static/{ZXCWkgHobz-KLrAXDB5-p → VKxfWxC1_CBTppJYBGEwt}/_buildManifest.js +0 -0
- /package/dist/app/_next/static/{ZXCWkgHobz-KLrAXDB5-p → VKxfWxC1_CBTppJYBGEwt}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../baasix/auth/services/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AA0E5B,MAAM,UAAU,oBAAoB,CAAC,OAAoB,EAAE,SAAwB,EAAE;IACnF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,iBAAiB;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,gBAAgB;IAE7D,OAAO;QACL,aAAa;YACX,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,SAAS,EAAE;YAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;YAE1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;gBAC1C,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,SAAS,EAAE,QAAQ,IAAI,IAAI;gBAC3B,SAAS;gBACT,SAAS,EAAE,SAAS,IAAI,IAAI;gBAC5B,SAAS,EAAE,SAAS,IAAI,IAAI;gBAC5B,IAAI;aACL,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,KAAK;YACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YAEjC,+BAA+B;YAC/B,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,MAAM,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,2DAA2D;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3F,IAAI,UAAU,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;gBAC7D,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;gBACrE,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;YACnC,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,KAAK;YAC3B,MAAM,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../baasix/auth/services/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;mBAOlB,OAAO;;
|
|
1
|
+
{"version":3,"file":"permission.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;mBAOlB,OAAO;;AAyKtC,wBAGE"}
|
|
@@ -45,14 +45,11 @@ const registerEndpoint = (app) => {
|
|
|
45
45
|
const newPermission = await itemsService.readOne(newId);
|
|
46
46
|
// Reload permissions
|
|
47
47
|
await permissionService.loadPermissions();
|
|
48
|
-
// Invalidate auth
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (data.collection) {
|
|
54
|
-
await invalidateCollectionCache(data.collection);
|
|
55
|
-
}
|
|
48
|
+
// Invalidate auth and collection caches in parallel
|
|
49
|
+
await Promise.all([
|
|
50
|
+
data.role_Id ? invalidateAuthCache(data.role_Id) : Promise.resolve(),
|
|
51
|
+
data.collection ? invalidateCollectionCache(data.collection) : Promise.resolve(),
|
|
52
|
+
]);
|
|
56
53
|
res.status(201).json(newPermission);
|
|
57
54
|
}
|
|
58
55
|
catch (error) {
|
|
@@ -82,9 +79,6 @@ const registerEndpoint = (app) => {
|
|
|
82
79
|
if (data.role_Id) {
|
|
83
80
|
rolesToInvalidate.add(data.role_Id);
|
|
84
81
|
}
|
|
85
|
-
for (const roleId of rolesToInvalidate) {
|
|
86
|
-
await invalidateAuthCache(roleId);
|
|
87
|
-
}
|
|
88
82
|
// Invalidate cache for both old and new collections (if collection changed)
|
|
89
83
|
const collectionsToInvalidate = new Set();
|
|
90
84
|
if (oldPermission.collection) {
|
|
@@ -93,9 +87,11 @@ const registerEndpoint = (app) => {
|
|
|
93
87
|
if (data.collection) {
|
|
94
88
|
collectionsToInvalidate.add(data.collection);
|
|
95
89
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
90
|
+
// Batch all invalidations in parallel
|
|
91
|
+
await Promise.all([
|
|
92
|
+
...Array.from(rolesToInvalidate).map(roleId => invalidateAuthCache(roleId)),
|
|
93
|
+
...Array.from(collectionsToInvalidate).map(collection => invalidateCollectionCache(collection)),
|
|
94
|
+
]);
|
|
99
95
|
res.json(updatedPermission);
|
|
100
96
|
}
|
|
101
97
|
catch (error) {
|
|
@@ -114,14 +110,11 @@ const registerEndpoint = (app) => {
|
|
|
114
110
|
await itemsService.deleteOne(id);
|
|
115
111
|
// Reload permissions
|
|
116
112
|
await permissionService.loadPermissions();
|
|
117
|
-
// Invalidate auth
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (permission.collection) {
|
|
123
|
-
await invalidateCollectionCache(permission.collection);
|
|
124
|
-
}
|
|
113
|
+
// Invalidate auth and collection caches in parallel
|
|
114
|
+
await Promise.all([
|
|
115
|
+
permission.role_Id ? invalidateAuthCache(permission.role_Id) : Promise.resolve(),
|
|
116
|
+
permission.collection ? invalidateCollectionCache(permission.collection) : Promise.resolve(),
|
|
117
|
+
]);
|
|
125
118
|
res.status(204).end();
|
|
126
119
|
}
|
|
127
120
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.route.js","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,kCAAkC,CAAC;AACjE,OAAO,YAAY,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpF,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,EAAE;IACxC,sBAAsB;IACtB,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE;gBACzD,cAAc,EAAE,GAAG,CAAC,cAAqB;aAC1C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;gBAC5C,KAAK,EAAE,CAAC,CAAC;aACV,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YAE1B,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE;gBACzD,cAAc,EAAE,GAAG,CAAC,cAAqB;aAC1C,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAElD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YAEtB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE;gBACzD,cAAc,EAAE,GAAG,CAAC,cAAqB;aAC1C,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEjD,oDAAoD;YACpD,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAExD,qBAAqB;YACrB,MAAM,iBAAiB,CAAC,eAAe,EAAE,CAAC;YAE1C,
|
|
1
|
+
{"version":3,"file":"permission.route.js","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,10 @@ export declare class ItemsService {
|
|
|
63
63
|
* Check if user is administrator
|
|
64
64
|
*/
|
|
65
65
|
private isAdministrator;
|
|
66
|
+
/**
|
|
67
|
+
* Deduplicate joins by alias — removes duplicate join entries in-place.
|
|
68
|
+
*/
|
|
69
|
+
private deduplicateJoins;
|
|
66
70
|
/**
|
|
67
71
|
* Apply tenant context to query filter
|
|
68
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemsService.d.ts","sourceRoot":"","sources":["../../baasix/services/ItemsService.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAIV,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAS3B,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAC5C,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAkC;IACzD,OAAO,CAAC,MAAM,CAAC,CAAkB;IACjC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAU;gBAEnB,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB;IAgB1D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;;OAGG;IACH,OAAO,CAAC,OAAO;IAWf;;;OAGG;IACH,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"ItemsService.d.ts","sourceRoot":"","sources":["../../baasix/services/ItemsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,16 +72,17 @@ export class ItemsService {
|
|
|
72
72
|
* Extract all table names involved in a query (including relations)
|
|
73
73
|
* This is CRITICAL for proper cache invalidation
|
|
74
74
|
*/
|
|
75
|
-
extractAllTables(includes) {
|
|
76
|
-
const
|
|
75
|
+
extractAllTables(includes, collection) {
|
|
76
|
+
const coll = collection || this.collection;
|
|
77
|
+
const tables = [coll];
|
|
77
78
|
if (!includes || includes.length === 0) {
|
|
78
79
|
return tables;
|
|
79
80
|
}
|
|
80
81
|
for (const include of includes) {
|
|
81
82
|
// Get the relation definition
|
|
82
|
-
const relationDef = schemaManager.getRelation(
|
|
83
|
+
const relationDef = schemaManager.getRelation(coll, include.relation);
|
|
83
84
|
if (!relationDef) {
|
|
84
|
-
console.warn(`[ItemsService.extractAllTables] Relation not found: ${
|
|
85
|
+
console.warn(`[ItemsService.extractAllTables] Relation not found: ${coll}.${include.relation}`);
|
|
85
86
|
continue;
|
|
86
87
|
}
|
|
87
88
|
// Add the related table
|
|
@@ -96,20 +97,10 @@ export class ItemsService {
|
|
|
96
97
|
if (relationDef.type === 'M2A' && relationDef.relatedCollections) {
|
|
97
98
|
tables.push(...relationDef.relatedCollections);
|
|
98
99
|
}
|
|
99
|
-
// Recursively handle nested includes
|
|
100
|
-
if (include.include && include.include.length > 0) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const relatedService = new ItemsService(relationDef.relatedCollection, {
|
|
104
|
-
accountability: this.accountability,
|
|
105
|
-
tenant: this.tenant
|
|
106
|
-
});
|
|
107
|
-
const nestedTables = relatedService.extractAllTables(include.include);
|
|
108
|
-
tables.push(...nestedTables);
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
console.warn(`[ItemsService.extractAllTables] Error extracting nested tables:`, error);
|
|
112
|
-
}
|
|
100
|
+
// Recursively handle nested includes using schema manager directly (no ItemsService instantiation)
|
|
101
|
+
if (include.include && include.include.length > 0 && relationDef.relatedCollection) {
|
|
102
|
+
const nestedTables = this.extractAllTables(include.include, relationDef.relatedCollection);
|
|
103
|
+
tables.push(...nestedTables);
|
|
113
104
|
}
|
|
114
105
|
}
|
|
115
106
|
// Return unique table names only
|
|
@@ -292,6 +283,21 @@ export class ItemsService {
|
|
|
292
283
|
}
|
|
293
284
|
return false;
|
|
294
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Deduplicate joins by alias — removes duplicate join entries in-place.
|
|
288
|
+
*/
|
|
289
|
+
deduplicateJoins(joins) {
|
|
290
|
+
const seen = new Set();
|
|
291
|
+
const unique = [];
|
|
292
|
+
for (const join of joins) {
|
|
293
|
+
if (!seen.has(join.alias)) {
|
|
294
|
+
seen.add(join.alias);
|
|
295
|
+
unique.push(join);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
joins.length = 0;
|
|
299
|
+
joins.push(...unique);
|
|
300
|
+
}
|
|
295
301
|
/**
|
|
296
302
|
* Apply tenant context to query filter
|
|
297
303
|
*/
|
|
@@ -442,24 +448,22 @@ export class ItemsService {
|
|
|
442
448
|
[this.primaryKey]: idFilter
|
|
443
449
|
});
|
|
444
450
|
}
|
|
445
|
-
// Apply permission filters
|
|
451
|
+
// Apply permission filters (single combined lookup instead of 3 separate calls)
|
|
446
452
|
let permissionRelConditions = {};
|
|
453
|
+
let permAllowedFields = null;
|
|
447
454
|
if (!bypassPermissions && !isAdmin) {
|
|
448
455
|
const roleId = this.getRoleId();
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
if (!hasAccess) {
|
|
456
|
+
const { canAccess, filter: permFilter, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, action, this.accountability);
|
|
457
|
+
if (!canAccess) {
|
|
452
458
|
throw new APIError(`You don't have permission to ${action} items in '${this.collection}'`, 403);
|
|
453
459
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
if (permissionFilter.conditions) {
|
|
457
|
-
filter = combineFilters(filter, permissionFilter.conditions);
|
|
460
|
+
if (permFilter.conditions) {
|
|
461
|
+
filter = combineFilters(filter, permFilter.conditions);
|
|
458
462
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
permissionRelConditions = permissionFilter.relConditions;
|
|
463
|
+
if (permFilter.relConditions && Object.keys(permFilter.relConditions).length > 0) {
|
|
464
|
+
permissionRelConditions = permFilter.relConditions;
|
|
462
465
|
}
|
|
466
|
+
permAllowedFields = allowedFields;
|
|
463
467
|
}
|
|
464
468
|
// Apply tenant context
|
|
465
469
|
filter = await this.enforceTenantContextFilter(filter);
|
|
@@ -490,19 +494,10 @@ export class ItemsService {
|
|
|
490
494
|
// Note: query.include is not used - includes are derived from fields parameter
|
|
491
495
|
const allIncludes = [...processedIncludes];
|
|
492
496
|
// Apply field-level permission filtering for relational fields
|
|
493
|
-
//
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
if (roleId) {
|
|
498
|
-
const allowedFields = await permissionService.getAllowedFields(roleId, this.collection, action);
|
|
499
|
-
// Filter relational field attributes based on allowed fields
|
|
500
|
-
if (allowedFields) {
|
|
501
|
-
this.filterIncludesByAllowedFields(allIncludes, allowedFields);
|
|
502
|
-
// Also filter the processedIncludes (which is the same reference used later)
|
|
503
|
-
this.filterIncludesByAllowedFields(processedIncludes, allowedFields);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
497
|
+
// Uses allowedFields from the combined permission lookup above
|
|
498
|
+
if (!bypassPermissions && !isAdmin && permAllowedFields) {
|
|
499
|
+
this.filterIncludesByAllowedFields(allIncludes, permAllowedFields);
|
|
500
|
+
this.filterIncludesByAllowedFields(processedIncludes, permAllowedFields);
|
|
506
501
|
}
|
|
507
502
|
// Merge permission relConditions with query relConditions
|
|
508
503
|
// Permission relConditions take precedence (they are security constraints)
|
|
@@ -607,17 +602,7 @@ export class ItemsService {
|
|
|
607
602
|
});
|
|
608
603
|
console.log(`[ItemsService.buildQuery] WHERE clause generated:`, whereClause ? 'yes' : 'no (undefined)');
|
|
609
604
|
// Deduplicate filter joins by alias (multiple conditions on same relation create duplicates)
|
|
610
|
-
|
|
611
|
-
const seenAliases = new Set();
|
|
612
|
-
for (const join of filterJoins) {
|
|
613
|
-
if (!seenAliases.has(join.alias)) {
|
|
614
|
-
seenAliases.add(join.alias);
|
|
615
|
-
uniqueFilterJoins.push(join);
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
// Replace filterJoins with deduplicated version
|
|
619
|
-
filterJoins.length = 0;
|
|
620
|
-
filterJoins.push(...uniqueFilterJoins);
|
|
605
|
+
this.deduplicateJoins(filterJoins);
|
|
621
606
|
// Log filter joins if any were created
|
|
622
607
|
if (filterJoins.length > 0) {
|
|
623
608
|
console.log(`[ItemsService] Filter generated ${filterJoins.length} joins for relation paths`);
|
|
@@ -744,11 +729,12 @@ export class ItemsService {
|
|
|
744
729
|
/**
|
|
745
730
|
* Apply field-level permissions
|
|
746
731
|
*/
|
|
747
|
-
async applyFieldPermissions(data, action, isAdmin) {
|
|
732
|
+
async applyFieldPermissions(data, action, isAdmin, prefetchedAllowedFields) {
|
|
748
733
|
if (isAdmin)
|
|
749
734
|
return;
|
|
750
|
-
const
|
|
751
|
-
|
|
735
|
+
const allowedFields = prefetchedAllowedFields !== undefined
|
|
736
|
+
? prefetchedAllowedFields
|
|
737
|
+
: await permissionService.getAllowedFields(this.getRoleId(), this.collection, action);
|
|
752
738
|
if (!allowedFields || allowedFields.length === 0) {
|
|
753
739
|
throw new APIError(`You don't have permission to ${action} this item`, 403);
|
|
754
740
|
}
|
|
@@ -1299,15 +1285,12 @@ export class ItemsService {
|
|
|
1299
1285
|
let combinedFilter = filter;
|
|
1300
1286
|
if (!bypassPermissions && !isAdmin) {
|
|
1301
1287
|
const roleId = this.getRoleId();
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
if (!hasAccess) {
|
|
1288
|
+
const { canAccess, filter: permFilter } = await permissionService.getFullPermissionData(roleId, this.collection, 'read', this.accountability);
|
|
1289
|
+
if (!canAccess) {
|
|
1305
1290
|
throw new APIError(`You don't have permission to read items in '${this.collection}'`, 403);
|
|
1306
1291
|
}
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
if (permissionFilter.conditions) {
|
|
1310
|
-
combinedFilter = combineFilters(combinedFilter, permissionFilter.conditions);
|
|
1292
|
+
if (permFilter.conditions) {
|
|
1293
|
+
combinedFilter = combineFilters(combinedFilter, permFilter.conditions);
|
|
1311
1294
|
}
|
|
1312
1295
|
}
|
|
1313
1296
|
combinedFilter = await this.enforceTenantContextFilter(combinedFilter);
|
|
@@ -1321,16 +1304,7 @@ export class ItemsService {
|
|
|
1321
1304
|
joins: filterJoins
|
|
1322
1305
|
});
|
|
1323
1306
|
// Deduplicate filter joins by alias
|
|
1324
|
-
|
|
1325
|
-
const seenAliases = new Set();
|
|
1326
|
-
for (const join of filterJoins) {
|
|
1327
|
-
if (!seenAliases.has(join.alias)) {
|
|
1328
|
-
seenAliases.add(join.alias);
|
|
1329
|
-
uniqueFilterJoins.push(join);
|
|
1330
|
-
}
|
|
1331
|
-
}
|
|
1332
|
-
filterJoins.length = 0;
|
|
1333
|
-
filterJoins.push(...uniqueFilterJoins);
|
|
1307
|
+
this.deduplicateJoins(filterJoins);
|
|
1334
1308
|
// Resolve all relation paths to joins
|
|
1335
1309
|
const allJoins = [...filterJoins];
|
|
1336
1310
|
const pathToAliasMap = new Map(); // Maps relation path to final table alias
|
|
@@ -1602,16 +1576,19 @@ export class ItemsService {
|
|
|
1602
1576
|
modifiedData.password = await argon2.hash(modifiedData.password);
|
|
1603
1577
|
}
|
|
1604
1578
|
const isAdmin = await this.isAdministrator();
|
|
1605
|
-
// Check permission
|
|
1579
|
+
// Check permission and apply field permissions (single cache lookup)
|
|
1606
1580
|
if (!options.bypassPermissions && !isAdmin) {
|
|
1607
1581
|
const roleId = this.getRoleId();
|
|
1608
|
-
const
|
|
1609
|
-
if (!
|
|
1582
|
+
const { canAccess, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, 'create', this.accountability);
|
|
1583
|
+
if (!canAccess) {
|
|
1610
1584
|
throw new APIError("You don't have permission to create items in '" + this.collection + "'", 403);
|
|
1611
1585
|
}
|
|
1586
|
+
await this.applyFieldPermissions(modifiedData, 'create', isAdmin, allowedFields);
|
|
1587
|
+
const defaultValues = await this.getDefaultValues('create');
|
|
1588
|
+
modifiedData = { ...defaultValues, ...modifiedData };
|
|
1612
1589
|
}
|
|
1613
|
-
|
|
1614
|
-
|
|
1590
|
+
else if (!options.bypassPermissions) {
|
|
1591
|
+
// Admin — skip canAccess check but still apply defaults
|
|
1615
1592
|
await this.applyFieldPermissions(modifiedData, 'create', isAdmin);
|
|
1616
1593
|
const defaultValues = await this.getDefaultValues('create');
|
|
1617
1594
|
modifiedData = { ...defaultValues, ...modifiedData };
|
|
@@ -1772,11 +1749,11 @@ export class ItemsService {
|
|
|
1772
1749
|
// These may have external side effects (emails, third-party calls)
|
|
1773
1750
|
// that cannot be rolled back, so we only execute them after commit
|
|
1774
1751
|
for (const result of results) {
|
|
1775
|
-
// Create audit log
|
|
1776
|
-
|
|
1752
|
+
// Create audit log (fire-and-forget — non-blocking)
|
|
1753
|
+
this.createAuditLog('create', result.itemId, {
|
|
1777
1754
|
before: null,
|
|
1778
1755
|
after: result.document
|
|
1779
|
-
}, options.transaction);
|
|
1756
|
+
}, options.transaction).catch(() => { });
|
|
1780
1757
|
// Execute after-create hooks
|
|
1781
1758
|
await hooksManager.executeHooks(this.collection, 'items.create.after', this.accountability, { data: result.modifiedData, document: result.document, transaction: options.transaction });
|
|
1782
1759
|
}
|
|
@@ -1822,16 +1799,19 @@ export class ItemsService {
|
|
|
1822
1799
|
modifiedData.password = await argon2.hash(modifiedData.password);
|
|
1823
1800
|
}
|
|
1824
1801
|
const isAdmin = await this.isAdministrator();
|
|
1825
|
-
// Check permission
|
|
1802
|
+
// Check permission and apply field permissions (single cache lookup)
|
|
1826
1803
|
if (!options.bypassPermissions && !isAdmin) {
|
|
1827
1804
|
const roleId = this.getRoleId();
|
|
1828
|
-
const
|
|
1829
|
-
if (!
|
|
1805
|
+
const { canAccess, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, 'update', this.accountability);
|
|
1806
|
+
if (!canAccess) {
|
|
1830
1807
|
throw new APIError("You don't have permission to update items in '" + this.collection + "'", 403);
|
|
1831
1808
|
}
|
|
1809
|
+
await this.applyFieldPermissions(modifiedData, 'update', isAdmin, allowedFields);
|
|
1810
|
+
const defaultValues = await this.getDefaultValues('update');
|
|
1811
|
+
modifiedData = { ...defaultValues, ...modifiedData };
|
|
1832
1812
|
}
|
|
1833
|
-
|
|
1834
|
-
|
|
1813
|
+
else if (!options.bypassPermissions) {
|
|
1814
|
+
// Admin — skip canAccess check but still apply defaults
|
|
1835
1815
|
await this.applyFieldPermissions(modifiedData, 'update', isAdmin);
|
|
1836
1816
|
const defaultValues = await this.getDefaultValues('update');
|
|
1837
1817
|
modifiedData = { ...defaultValues, ...modifiedData };
|
|
@@ -1874,16 +1854,7 @@ export class ItemsService {
|
|
|
1874
1854
|
joins: filterJoins
|
|
1875
1855
|
});
|
|
1876
1856
|
// Deduplicate filter joins by alias
|
|
1877
|
-
|
|
1878
|
-
const seenAliases = new Set();
|
|
1879
|
-
for (const join of filterJoins) {
|
|
1880
|
-
if (!seenAliases.has(join.alias)) {
|
|
1881
|
-
seenAliases.add(join.alias);
|
|
1882
|
-
uniqueJoins.push(join);
|
|
1883
|
-
}
|
|
1884
|
-
}
|
|
1885
|
-
filterJoins.length = 0;
|
|
1886
|
-
filterJoins.push(...uniqueJoins);
|
|
1857
|
+
this.deduplicateJoins(filterJoins);
|
|
1887
1858
|
let existingItems;
|
|
1888
1859
|
if (filterJoins.length > 0) {
|
|
1889
1860
|
// Use transaction for reads to prevent deadlocks and ensure consistency
|
|
@@ -1957,13 +1928,8 @@ export class ItemsService {
|
|
|
1957
1928
|
updatedItem = updateResult[0];
|
|
1958
1929
|
}
|
|
1959
1930
|
else {
|
|
1960
|
-
//
|
|
1961
|
-
|
|
1962
|
-
.select()
|
|
1963
|
-
.from(this.table)
|
|
1964
|
-
.where(eq(this.getPrimaryKeyColumn(), parsedId))
|
|
1965
|
-
.limit(1);
|
|
1966
|
-
updatedItem = updatedItems[0];
|
|
1931
|
+
// No main table fields changed — reuse the already-fetched record
|
|
1932
|
+
updatedItem = existingItem;
|
|
1967
1933
|
}
|
|
1968
1934
|
// Process deferred HasMany relations
|
|
1969
1935
|
for (const { association, associationInfo, value } of deferredHasMany) {
|
|
@@ -1977,13 +1943,9 @@ export class ItemsService {
|
|
|
1977
1943
|
for (const { association, associationInfo, value } of deferredM2A) {
|
|
1978
1944
|
await handleM2ARelationship(updatedItem, association, associationInfo, value, this, ItemsService, transaction);
|
|
1979
1945
|
}
|
|
1980
|
-
//
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
.from(this.table)
|
|
1984
|
-
.where(eq(this.getPrimaryKeyColumn(), parsedId))
|
|
1985
|
-
.limit(1);
|
|
1986
|
-
const finalItem = finalItems[0];
|
|
1946
|
+
// Deferred relations (HasMany, M2M, M2A) only modify other tables, not the main record.
|
|
1947
|
+
// The updatedItem from .returning() (or existingItem fallback) is already the final state.
|
|
1948
|
+
const finalItem = updatedItem;
|
|
1987
1949
|
// Collect related tables for cache invalidation
|
|
1988
1950
|
const relatedTables = [];
|
|
1989
1951
|
if (deferredM2M.length > 0) {
|
|
@@ -2054,11 +2016,11 @@ export class ItemsService {
|
|
|
2054
2016
|
}
|
|
2055
2017
|
// Phase 3: Execute after hooks AFTER successful commit
|
|
2056
2018
|
for (const result of results) {
|
|
2057
|
-
// Create audit log
|
|
2058
|
-
|
|
2019
|
+
// Create audit log (fire-and-forget — non-blocking)
|
|
2020
|
+
this.createAuditLog('update', result.parsedId, {
|
|
2059
2021
|
before: result.previousDocument,
|
|
2060
2022
|
after: result.finalDocument
|
|
2061
|
-
}, options.transaction);
|
|
2023
|
+
}, options.transaction).catch(() => { });
|
|
2062
2024
|
// Execute after-update hooks
|
|
2063
2025
|
await hooksManager.executeHooks(this.collection, 'items.update.after', this.accountability, {
|
|
2064
2026
|
id: result.parsedId,
|
|
@@ -2182,16 +2144,7 @@ export class ItemsService {
|
|
|
2182
2144
|
joins: filterJoins
|
|
2183
2145
|
});
|
|
2184
2146
|
// Deduplicate filter joins by alias
|
|
2185
|
-
|
|
2186
|
-
const seenAliases = new Set();
|
|
2187
|
-
for (const join of filterJoins) {
|
|
2188
|
-
if (!seenAliases.has(join.alias)) {
|
|
2189
|
-
seenAliases.add(join.alias);
|
|
2190
|
-
uniqueJoins.push(join);
|
|
2191
|
-
}
|
|
2192
|
-
}
|
|
2193
|
-
filterJoins.length = 0;
|
|
2194
|
-
filterJoins.push(...uniqueJoins);
|
|
2147
|
+
this.deduplicateJoins(filterJoins);
|
|
2195
2148
|
let existingItems;
|
|
2196
2149
|
if (filterJoins.length > 0) {
|
|
2197
2150
|
// Use transaction for reads to prevent deadlocks and ensure consistency
|
|
@@ -2282,11 +2235,11 @@ export class ItemsService {
|
|
|
2282
2235
|
}
|
|
2283
2236
|
// Phase 3: Execute after hooks AFTER successful commit
|
|
2284
2237
|
for (const result of results) {
|
|
2285
|
-
// Create audit log
|
|
2286
|
-
|
|
2238
|
+
// Create audit log (fire-and-forget — non-blocking)
|
|
2239
|
+
this.createAuditLog('delete', result.parsedId, {
|
|
2287
2240
|
before: result.document,
|
|
2288
2241
|
after: null
|
|
2289
|
-
}, options.transaction);
|
|
2242
|
+
}, options.transaction).catch(() => { });
|
|
2290
2243
|
// Execute after-delete hooks
|
|
2291
2244
|
await hooksManager.executeHooks(this.collection, 'items.delete.after', this.accountability, { id: result.parsedId, document: result.document, transaction: options.transaction });
|
|
2292
2245
|
}
|