@memberjunction/core-entities 5.29.0 → 5.30.1
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/custom/MJConversationDetailEntityExtended.d.ts +31 -0
- package/dist/custom/MJConversationDetailEntityExtended.d.ts.map +1 -0
- package/dist/custom/MJConversationDetailEntityExtended.js +106 -0
- package/dist/custom/MJConversationDetailEntityExtended.js.map +1 -0
- package/dist/custom/PermissionProviders/AIAgentPermissionProvider.d.ts +31 -0
- package/dist/custom/PermissionProviders/AIAgentPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/AIAgentPermissionProvider.js +151 -0
- package/dist/custom/PermissionProviders/AIAgentPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/AccessControlRuleProvider.d.ts +45 -0
- package/dist/custom/PermissionProviders/AccessControlRuleProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/AccessControlRuleProvider.js +253 -0
- package/dist/custom/PermissionProviders/AccessControlRuleProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/ApplicationRolePermissionProvider.d.ts +28 -0
- package/dist/custom/PermissionProviders/ApplicationRolePermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/ApplicationRolePermissionProvider.js +144 -0
- package/dist/custom/PermissionProviders/ApplicationRolePermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/ArtifactPermissionProvider.d.ts +45 -0
- package/dist/custom/PermissionProviders/ArtifactPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/ArtifactPermissionProvider.js +169 -0
- package/dist/custom/PermissionProviders/ArtifactPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/CollectionPermissionProvider.d.ts +40 -0
- package/dist/custom/PermissionProviders/CollectionPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/CollectionPermissionProvider.js +220 -0
- package/dist/custom/PermissionProviders/CollectionPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/DashboardPermissionProvider.d.ts +47 -0
- package/dist/custom/PermissionProviders/DashboardPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/DashboardPermissionProvider.js +218 -0
- package/dist/custom/PermissionProviders/DashboardPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/EntityPermissionProvider.d.ts +25 -0
- package/dist/custom/PermissionProviders/EntityPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/EntityPermissionProvider.js +129 -0
- package/dist/custom/PermissionProviders/EntityPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/QueryPermissionProvider.d.ts +24 -0
- package/dist/custom/PermissionProviders/QueryPermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/QueryPermissionProvider.js +123 -0
- package/dist/custom/PermissionProviders/QueryPermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/ResourcePermissionProvider.d.ts +39 -0
- package/dist/custom/PermissionProviders/ResourcePermissionProvider.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/ResourcePermissionProvider.js +193 -0
- package/dist/custom/PermissionProviders/ResourcePermissionProvider.js.map +1 -0
- package/dist/custom/PermissionProviders/index.d.ts +16 -0
- package/dist/custom/PermissionProviders/index.d.ts.map +1 -0
- package/dist/custom/PermissionProviders/index.js +41 -0
- package/dist/custom/PermissionProviders/index.js.map +1 -0
- package/dist/custom/Permissions/BaseShareEntityExtended.d.ts +105 -0
- package/dist/custom/Permissions/BaseShareEntityExtended.d.ts.map +1 -0
- package/dist/custom/Permissions/BaseShareEntityExtended.js +162 -0
- package/dist/custom/Permissions/BaseShareEntityExtended.js.map +1 -0
- package/dist/custom/Permissions/MJAccessControlRuleEntityExtended.d.ts +22 -0
- package/dist/custom/Permissions/MJAccessControlRuleEntityExtended.d.ts.map +1 -0
- package/dist/custom/Permissions/MJAccessControlRuleEntityExtended.js +75 -0
- package/dist/custom/Permissions/MJAccessControlRuleEntityExtended.js.map +1 -0
- package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.d.ts +22 -0
- package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.d.ts.map +1 -0
- package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js +114 -0
- package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js.map +1 -0
- package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.d.ts +25 -0
- package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.d.ts.map +1 -0
- package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js +101 -0
- package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js.map +1 -0
- package/dist/custom/Permissions/MJDashboardPermissionEntityExtended.d.ts +32 -0
- package/dist/custom/Permissions/MJDashboardPermissionEntityExtended.d.ts.map +1 -0
- package/dist/custom/Permissions/MJDashboardPermissionEntityExtended.js +95 -0
- package/dist/custom/Permissions/MJDashboardPermissionEntityExtended.js.map +1 -0
- package/dist/custom/Permissions/index.d.ts +13 -0
- package/dist/custom/Permissions/index.d.ts.map +1 -0
- package/dist/custom/Permissions/index.js +22 -0
- package/dist/custom/Permissions/index.js.map +1 -0
- package/dist/custom/Permissions/shareNotification.d.ts +72 -0
- package/dist/custom/Permissions/shareNotification.d.ts.map +1 -0
- package/dist/custom/Permissions/shareNotification.js +98 -0
- package/dist/custom/Permissions/shareNotification.js.map +1 -0
- package/dist/custom/ResourcePermissions/MJResourcePermissionEntityExtended.d.ts +63 -1
- package/dist/custom/ResourcePermissions/MJResourcePermissionEntityExtended.d.ts.map +1 -1
- package/dist/custom/ResourcePermissions/MJResourcePermissionEntityExtended.js +244 -27
- package/dist/custom/ResourcePermissions/MJResourcePermissionEntityExtended.js.map +1 -1
- package/dist/custom/ResourcePermissions/ResourcePermissionEngine.d.ts +7 -0
- package/dist/custom/ResourcePermissions/ResourcePermissionEngine.d.ts.map +1 -1
- package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js +13 -0
- package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js.map +1 -1
- package/dist/engines/GeoDataEngine.d.ts +42 -8
- package/dist/engines/GeoDataEngine.d.ts.map +1 -1
- package/dist/engines/GeoDataEngine.js +191 -36
- package/dist/engines/GeoDataEngine.js.map +1 -1
- package/dist/engines/PermissionEngine.d.ts +142 -0
- package/dist/engines/PermissionEngine.d.ts.map +1 -0
- package/dist/engines/PermissionEngine.js +343 -0
- package/dist/engines/PermissionEngine.js.map +1 -0
- package/dist/engines/UserInfoEngine.d.ts +6 -1
- package/dist/engines/UserInfoEngine.d.ts.map +1 -1
- package/dist/engines/UserInfoEngine.js +21 -5
- package/dist/engines/UserInfoEngine.js.map +1 -1
- package/dist/engines/conversations.d.ts +35 -0
- package/dist/engines/conversations.d.ts.map +1 -1
- package/dist/engines/conversations.js +103 -16
- package/dist/engines/conversations.js.map +1 -1
- package/dist/generated/entity_subclasses.d.ts +579 -52
- package/dist/generated/entity_subclasses.d.ts.map +1 -1
- package/dist/generated/entity_subclasses.js +697 -66
- package/dist/generated/entity_subclasses.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -4,14 +4,159 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { BaseEntity, CompositeKey } from "@memberjunction/core";
|
|
7
|
+
import { BaseEntity, CompositeKey, EntityPermissionType, LogError } from "@memberjunction/core";
|
|
8
8
|
import { RegisterClass, UUIDsEqual } from "@memberjunction/global";
|
|
9
9
|
import { MJResourcePermissionEntity } from "../../generated/entity_subclasses.js";
|
|
10
10
|
import { ResourcePermissionEngine } from "./ResourcePermissionEngine.js";
|
|
11
|
+
import { ConversationEngine } from "../../engines/conversations.js";
|
|
12
|
+
import { CreateShareNotification } from "../Permissions/shareNotification.js";
|
|
13
|
+
import { checkShareManagePermission } from "../Permissions/BaseShareEntityExtended.js";
|
|
14
|
+
/** `MJ: Resource Types.ID` for Conversations. */
|
|
15
|
+
const CONVERSATIONS_RESOURCE_TYPE_ID = '81D4BC3D-9FEB-EF11-B01A-286B35C04427';
|
|
11
16
|
/**
|
|
12
17
|
* Subclass for the Resource Permissiosn entity that implements some workflow logic
|
|
13
18
|
*/
|
|
14
19
|
let MJResourcePermissionEntityExtended = class MJResourcePermissionEntityExtended extends MJResourcePermissionEntity {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
/**
|
|
23
|
+
* Set by the async `Delete`/`Save` overrides after they confirm the
|
|
24
|
+
* context user is authorized via resource ownership or Owner-level grant.
|
|
25
|
+
* Read by the (sync) `CheckPermissions` override to bypass the role-based
|
|
26
|
+
* gate that would otherwise block non-admin users from revoking shares.
|
|
27
|
+
*/
|
|
28
|
+
this._authorizedByOwnerOverride = false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Relaxes the default role-based Update/Delete gate for three parties
|
|
32
|
+
* who legitimately need to manage a share:
|
|
33
|
+
*
|
|
34
|
+
* 1. **Grantor** — whoever created the grant (`SharedByUserID`).
|
|
35
|
+
* 2. **Resource owner** — the user who owns the underlying resource.
|
|
36
|
+
* Checked synchronously via in-memory engine caches (currently
|
|
37
|
+
* `ConversationEngine` for Conversations; add other engines as
|
|
38
|
+
* resource types adopt this pattern).
|
|
39
|
+
* 3. **Owner-level grantee** — anyone else holding an `Owner` permission
|
|
40
|
+
* on the same resource, consulted via the cached
|
|
41
|
+
* `ResourcePermissionEngine.Permissions`.
|
|
42
|
+
*
|
|
43
|
+
* Without this, resource owners can't revoke shares other users created —
|
|
44
|
+
* the UI/Developer roles don't have `CanDelete` on `MJ: Resource Permissions`.
|
|
45
|
+
*/
|
|
46
|
+
CheckPermissions(type, throwError) {
|
|
47
|
+
if (type === EntityPermissionType.Update || type === EntityPermissionType.Delete) {
|
|
48
|
+
if (this._authorizedByOwnerOverride)
|
|
49
|
+
return true;
|
|
50
|
+
const user = this.ActiveUser;
|
|
51
|
+
if (user && checkShareManagePermission(user, this.SharedByUserID, (userId) => this.currentUserOwnsResource(userId) || this.currentUserHasOwnerGrant(userId))) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return super.CheckPermissions(type, throwError);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Async owner lookup that loads the target resource and returns `true`
|
|
59
|
+
* if the context user owns it. Generic — uses the resource type catalog
|
|
60
|
+
* to find the owner field name, so any resource type seeded in
|
|
61
|
+
* `MJ: Resource Types` works without per-type code here.
|
|
62
|
+
*/
|
|
63
|
+
async currentUserOwnsResourceAsync() {
|
|
64
|
+
const user = this.ContextCurrentUser;
|
|
65
|
+
if (!user)
|
|
66
|
+
return false;
|
|
67
|
+
const provider = this.ProviderToUse;
|
|
68
|
+
if (provider?.ProviderType !== 'Database')
|
|
69
|
+
return false;
|
|
70
|
+
try {
|
|
71
|
+
const engine = ResourcePermissionEngine.GetProviderInstance(provider, ResourcePermissionEngine);
|
|
72
|
+
await engine.Config(false, user);
|
|
73
|
+
const rt = engine.ResourceTypes.find((t) => UUIDsEqual(t.ID, this.ResourceTypeID));
|
|
74
|
+
const typeFields = engine.GetResourceTypeInfoFields(this.ResourceTypeID);
|
|
75
|
+
if (!rt || !typeFields?.OwnerIDFieldName || !typeFields?.PrimaryKeyFieldName) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const resourceRecord = await provider.GetEntityObject(rt.Entity, user);
|
|
79
|
+
const ck = new CompositeKey([
|
|
80
|
+
{ FieldName: typeFields.PrimaryKeyFieldName, Value: this.ResourceRecordID }
|
|
81
|
+
]);
|
|
82
|
+
const loaded = await resourceRecord.InnerLoad(ck);
|
|
83
|
+
if (!loaded)
|
|
84
|
+
return false;
|
|
85
|
+
const ownerId = resourceRecord.Get(typeFields.OwnerIDFieldName);
|
|
86
|
+
return !!ownerId && UUIDsEqual(ownerId, user.ID);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
LogError(`MJResourcePermissionEntityExtended.currentUserOwnsResourceAsync: ${error instanceof Error ? error.message : String(error)}`);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compute whether the context user may Update/Delete this permission row.
|
|
95
|
+
* Combines the sync checks (fast path, uses engine caches) with the async
|
|
96
|
+
* resource-owner lookup (works on the server where caches aren't populated).
|
|
97
|
+
*/
|
|
98
|
+
async callerMayManageShare() {
|
|
99
|
+
const user = this.ContextCurrentUser;
|
|
100
|
+
if (!user)
|
|
101
|
+
return false;
|
|
102
|
+
if (this.SharedByUserID && UUIDsEqual(this.SharedByUserID, user.ID))
|
|
103
|
+
return true;
|
|
104
|
+
if (this.currentUserOwnsResource(user.ID))
|
|
105
|
+
return true;
|
|
106
|
+
if (this.currentUserHasOwnerGrant(user.ID))
|
|
107
|
+
return true;
|
|
108
|
+
return this.currentUserOwnsResourceAsync();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Async wrapper that runs the full authorization check (including the
|
|
112
|
+
* async resource-owner lookup) before delegating to the base delete. Sets
|
|
113
|
+
* `_authorizedByOwnerOverride` so the sync `CheckPermissions` called by
|
|
114
|
+
* the base class will bypass the role-based gate.
|
|
115
|
+
*/
|
|
116
|
+
async Delete(options) {
|
|
117
|
+
const provider = this.ProviderToUse;
|
|
118
|
+
if (provider?.ProviderType === 'Database') {
|
|
119
|
+
if (await this.callerMayManageShare()) {
|
|
120
|
+
this._authorizedByOwnerOverride = true;
|
|
121
|
+
try {
|
|
122
|
+
return await super.Delete(options);
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
this._authorizedByOwnerOverride = false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return super.Delete(options);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Checks resource-type-specific engine caches synchronously to decide
|
|
133
|
+
* whether `userId` owns the record this permission row points at.
|
|
134
|
+
*/
|
|
135
|
+
currentUserOwnsResource(userId) {
|
|
136
|
+
if (UUIDsEqual(this.ResourceTypeID, CONVERSATIONS_RESOURCE_TYPE_ID)) {
|
|
137
|
+
const conv = ConversationEngine.Instance.Conversations.find((c) => UUIDsEqual(c.ID, this.ResourceRecordID));
|
|
138
|
+
return !!conv?.UserID && UUIDsEqual(conv.UserID, userId);
|
|
139
|
+
}
|
|
140
|
+
// Additional resource-type owner lookups can be added here.
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Owner-level grantees (direct or via role) can manage shares on the
|
|
145
|
+
* resource. Reads from `ResourcePermissionEngine`'s cached permissions —
|
|
146
|
+
* must already be configured; on the server this happens at startup.
|
|
147
|
+
*/
|
|
148
|
+
currentUserHasOwnerGrant(userId) {
|
|
149
|
+
const engine = ResourcePermissionEngine.Instance;
|
|
150
|
+
if (!engine.Permissions)
|
|
151
|
+
return false;
|
|
152
|
+
return engine.Permissions.some((p) => UUIDsEqual(p.ResourceTypeID, this.ResourceTypeID) &&
|
|
153
|
+
UUIDsEqual(p.ResourceRecordID, this.ResourceRecordID) &&
|
|
154
|
+
p.Type === 'User' &&
|
|
155
|
+
!!p.UserID &&
|
|
156
|
+
UUIDsEqual(p.UserID, userId) &&
|
|
157
|
+
p.PermissionLevel === 'Owner' &&
|
|
158
|
+
p.Status === 'Approved');
|
|
159
|
+
}
|
|
15
160
|
/**
|
|
16
161
|
* This override encapsulates some busienss logic for the Resource Permissions entity as follows:
|
|
17
162
|
* 1) Whenever a new permission record is created that has a status of "Requested", we generate a new Notifications record for the owner of the resource being requested
|
|
@@ -27,6 +172,9 @@ let MJResourcePermissionEntityExtended = class MJResourcePermissionEntityExtende
|
|
|
27
172
|
const newRequest = !this.IsSaved && this.Status === 'Requested';
|
|
28
173
|
const statusField = this.Fields.find(f => f.Name.trim().toLowerCase() === 'status');
|
|
29
174
|
const statusChangedfromRequested = this.IsSaved && statusField.Dirty && statusField.OldValue.trim().toLowerCase() === 'requested';
|
|
175
|
+
// New direct share (grantor picked this user explicitly via the share dialog).
|
|
176
|
+
// Captured before `super.Save()` since `IsSaved` flips afterwards.
|
|
177
|
+
const newApprovedUserShare = !this.IsSaved && this.Status === 'Approved' && this.Type === 'User' && !!this.UserID;
|
|
30
178
|
// just in case, config the engine but it probably already has been configured in which case nothing will happen
|
|
31
179
|
const engine = ResourcePermissionEngine.GetProviderInstance(p, ResourcePermissionEngine);
|
|
32
180
|
await engine.Config(false, this.ContextCurrentUser);
|
|
@@ -48,41 +196,93 @@ let MJResourcePermissionEntityExtended = class MJResourcePermissionEntityExtende
|
|
|
48
196
|
// now grab the record name and owner from it
|
|
49
197
|
const recordName = resourceRecord.Get(resourceTypeFields.NameFieldName);
|
|
50
198
|
const recordOwnerID = resourceRecord.Get(resourceTypeFields.OwnerIDFieldName);
|
|
199
|
+
// Authorization gate for *granting* a share: only the resource's
|
|
200
|
+
// owner (or an existing Owner-level grantee) may create an Approved
|
|
201
|
+
// permission row. Access-request creates (Status='Requested') are
|
|
202
|
+
// allowed because the owner still approves them downstream.
|
|
203
|
+
if (!this.IsSaved && this.Status !== 'Requested') {
|
|
204
|
+
const authorized = this.callerMayGrantShare(engine, recordOwnerID);
|
|
205
|
+
if (!authorized) {
|
|
206
|
+
LogError(`User ${this.ContextCurrentUser?.ID ?? '(none)'} attempted to create a ${this.ResourceType} ` +
|
|
207
|
+
`share on record ${this.ResourceRecordID} without Owner rights.`);
|
|
208
|
+
const result = this.LatestResult;
|
|
209
|
+
if (result) {
|
|
210
|
+
result.Success = false;
|
|
211
|
+
result.Message = 'Only the owner can share this resource.';
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
51
216
|
// we now have our cached state values of newRequest and statusChanged and can proceed with the logic below
|
|
52
217
|
// after we call super.Save() to actually save the record
|
|
53
218
|
if (await super.Save(options)) {
|
|
54
|
-
//
|
|
55
|
-
|
|
219
|
+
// All three workflow branches now route through CreateShareNotification so
|
|
220
|
+
// NotificationEngine honors the recipient's per-channel preferences (in-app /
|
|
221
|
+
// email / SMS) and the "Resource Shared" email template renders uniformly.
|
|
222
|
+
// Fire-and-forget — save itself already succeeded, and the dispatcher falls
|
|
223
|
+
// back to in-app-only on handler failure.
|
|
56
224
|
if (newRequest) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
225
|
+
const requester = await p.GetEntityObject('MJ: Users', this.ContextCurrentUser);
|
|
226
|
+
await requester.Load(this.UserID);
|
|
227
|
+
if (recordOwnerID) {
|
|
228
|
+
void CreateShareNotification({
|
|
229
|
+
Provider: p,
|
|
230
|
+
ContextUser: this.ContextCurrentUser,
|
|
231
|
+
GrantorUserID: this.UserID, // the *requester* is the actor; the owner receives
|
|
232
|
+
GranteeUserID: recordOwnerID,
|
|
233
|
+
ResourceTypeLabel: this.ResourceType ?? rt?.Name ?? 'resource',
|
|
234
|
+
ResourceTypeName: rtEntityRecord?.Name, // route deep-link via "Records" ResourceType so the owner can approve/reject
|
|
235
|
+
ResourceName: recordName,
|
|
236
|
+
ResourceRecordID: this.ID, // target the permission row itself — the owner approves *this* request
|
|
237
|
+
Title: `New Request for Access to ${this.ResourceType}`,
|
|
238
|
+
Message: `A new request for access to ${this.ResourceType} record "${recordName}" has been made by ${requester.Name} (${requester.Email})`,
|
|
239
|
+
ExtraConfiguration: {
|
|
240
|
+
Entity: 'MJ: Resource Permissions',
|
|
241
|
+
ResourceRecordID: this.ResourceRecordID,
|
|
242
|
+
ResourcePermissionID: this.ID,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return true;
|
|
71
247
|
}
|
|
72
248
|
else if (statusChangedfromRequested) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
249
|
+
void CreateShareNotification({
|
|
250
|
+
Provider: p,
|
|
251
|
+
ContextUser: this.ContextCurrentUser,
|
|
252
|
+
GrantorUserID: this.SharedByUserID ?? this.ContextCurrentUser?.ID ?? recordOwnerID,
|
|
253
|
+
GranteeUserID: this.UserID,
|
|
254
|
+
ResourceTypeLabel: this.ResourceType ?? rt?.Name ?? 'resource',
|
|
255
|
+
ResourceTypeName: rt?.Name,
|
|
256
|
+
ResourceName: recordName,
|
|
257
|
+
ResourceRecordID: this.ResourceRecordID,
|
|
258
|
+
Title: `Request for Access to ${this.ResourceType} ${this.Status}`,
|
|
259
|
+
Message: `Your request for access to ${this.ResourceType} record "${recordName}" has been ${this.Status}`,
|
|
260
|
+
ExtraConfiguration: { ResourcePermissionID: this.ID },
|
|
81
261
|
});
|
|
82
|
-
return
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
else if (newApprovedUserShare) {
|
|
265
|
+
const grantorId = this.SharedByUserID ?? this.ContextCurrentUser?.ID ?? recordOwnerID;
|
|
266
|
+
if (grantorId && !UUIDsEqual(grantorId, this.UserID)) {
|
|
267
|
+
void CreateShareNotification({
|
|
268
|
+
Provider: p,
|
|
269
|
+
ContextUser: this.ContextCurrentUser,
|
|
270
|
+
GrantorUserID: grantorId,
|
|
271
|
+
GranteeUserID: this.UserID,
|
|
272
|
+
ResourceTypeLabel: this.ResourceType ?? rt?.Name ?? 'resource',
|
|
273
|
+
ResourceTypeName: rt?.Name,
|
|
274
|
+
ResourceName: recordName,
|
|
275
|
+
ResourceRecordID: this.ResourceRecordID,
|
|
276
|
+
ActionsSummary: this.PermissionLevel
|
|
277
|
+
? `${this.PermissionLevel} access`
|
|
278
|
+
: undefined,
|
|
279
|
+
ExtraConfiguration: { ResourcePermissionID: this.ID },
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
83
283
|
}
|
|
84
284
|
else {
|
|
85
|
-
return true; //
|
|
285
|
+
return true; // nothing to notify about (update without status change, etc.)
|
|
86
286
|
}
|
|
87
287
|
}
|
|
88
288
|
else {
|
|
@@ -98,6 +298,23 @@ let MJResourcePermissionEntityExtended = class MJResourcePermissionEntityExtende
|
|
|
98
298
|
return super.Save(options);
|
|
99
299
|
}
|
|
100
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* `true` when the context user may create an Approved grant on this resource:
|
|
303
|
+
* they are either the resource's owner, or they already hold an Owner-level
|
|
304
|
+
* `MJ: Resource Permissions` row on it (direct or via role). Returns `false`
|
|
305
|
+
* when there is no context user.
|
|
306
|
+
*/
|
|
307
|
+
callerMayGrantShare(engine, recordOwnerID) {
|
|
308
|
+
const user = this.ContextCurrentUser;
|
|
309
|
+
if (!user)
|
|
310
|
+
return false;
|
|
311
|
+
if (recordOwnerID && UUIDsEqual(recordOwnerID, user.ID))
|
|
312
|
+
return true;
|
|
313
|
+
const existing = engine.GetUserAvailableResources(user, this.ResourceTypeID);
|
|
314
|
+
return existing.some((p) => UUIDsEqual(p.ResourceRecordID, this.ResourceRecordID) &&
|
|
315
|
+
p.PermissionLevel === 'Owner' &&
|
|
316
|
+
p.Status === 'Approved');
|
|
317
|
+
}
|
|
101
318
|
};
|
|
102
319
|
MJResourcePermissionEntityExtended = __decorate([
|
|
103
320
|
RegisterClass(BaseEntity, 'MJ: Resource Permissions')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MJResourcePermissionEntityExtended.js","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/MJResourcePermissionEntityExtended.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"MJResourcePermissionEntityExtended.js","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/MJResourcePermissionEntityExtended.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,13 @@ export declare class ResourcePermissionEngine extends BaseEngine<ResourcePermiss
|
|
|
13
13
|
Config(forceRefresh?: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
|
|
14
14
|
get ResourceTypes(): MJResourceTypeEntity[];
|
|
15
15
|
get Permissions(): MJResourcePermissionEntity[];
|
|
16
|
+
/**
|
|
17
|
+
* Case-insensitive name → ID lookup against the cached `MJ: Resource Types`
|
|
18
|
+
* catalog. Returns null when the catalog isn't loaded yet or no matching
|
|
19
|
+
* type exists. Used by `shareNotification.ts` and `shareNotificationHandler.ts`
|
|
20
|
+
* to resolve the `ResourceTypeID` for notification deep-links.
|
|
21
|
+
*/
|
|
22
|
+
ResourceTypeIdByName(name: string | null | undefined): string | null;
|
|
16
23
|
/**
|
|
17
24
|
* Convenience method to find all of the permissions for a given Resource Type and Resource Record ID, no additional filtering takes place in this method regarding
|
|
18
25
|
* the status or level of the permission.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcePermissionEngine.d.ts","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/ResourcePermissionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAA8C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErJ,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAErG;;GAEG;AACH,qBACa,wBAAyB,SAAQ,UAAU,CAAC,wBAAwB,CAAC;IAC9E;;OAEG;IACH,WAAkB,QAAQ,IAAI,wBAAwB,CAErD;IAED,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAEpB;IAEW,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAkBhG,IAAW,aAAa,IAAI,oBAAoB,EAAE,CAEjD;IAED,IAAW,WAAW,IAAI,0BAA0B,EAAE,CAErD;
|
|
1
|
+
{"version":3,"file":"ResourcePermissionEngine.d.ts","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/ResourcePermissionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAA8C,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErJ,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAErG;;GAEG;AACH,qBACa,wBAAyB,SAAQ,UAAU,CAAC,wBAAwB,CAAC;IAC9E;;OAEG;IACH,WAAkB,QAAQ,IAAI,wBAAwB,CAErD;IAED,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAEpB;IAEW,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAkBhG,IAAW,aAAa,IAAI,oBAAoB,EAAE,CAEjD;IAED,IAAW,WAAW,IAAI,0BAA0B,EAAE,CAErD;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;IAQ3E;;;;;;OAMG;IACI,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAI7G;;;;;;;;;;;;;;;;;;OAkBG;IACI,8BAA8B,CACjC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,QAAQ,GACf,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAiCnC;;;;;;OAMG;IACI,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAuCvG;;;;OAIG;IACI,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAC;CAoB3I"}
|
|
@@ -39,6 +39,19 @@ let ResourcePermissionEngine = class ResourcePermissionEngine extends BaseEngine
|
|
|
39
39
|
get Permissions() {
|
|
40
40
|
return this._Permissions;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Case-insensitive name → ID lookup against the cached `MJ: Resource Types`
|
|
44
|
+
* catalog. Returns null when the catalog isn't loaded yet or no matching
|
|
45
|
+
* type exists. Used by `shareNotification.ts` and `shareNotificationHandler.ts`
|
|
46
|
+
* to resolve the `ResourceTypeID` for notification deep-links.
|
|
47
|
+
*/
|
|
48
|
+
ResourceTypeIdByName(name) {
|
|
49
|
+
if (!name)
|
|
50
|
+
return null;
|
|
51
|
+
const lower = name.trim().toLowerCase();
|
|
52
|
+
const match = this._ResourceTypes?.ResourceTypes?.find((rt) => rt.Name?.trim().toLowerCase() === lower);
|
|
53
|
+
return match?.ID ?? null;
|
|
54
|
+
}
|
|
42
55
|
/**
|
|
43
56
|
* Convenience method to find all of the permissions for a given Resource Type and Resource Record ID, no additional filtering takes place in this method regarding
|
|
44
57
|
* the status or level of the permission.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcePermissionEngine.js","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/ResourcePermissionEngine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ResourcePermissionEngine.js","sourceRoot":"","sources":["../../../src/custom/ResourcePermissions/ResourcePermissionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,14 +11,26 @@ export interface GeoPointResolution {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* GeoDataEngine provides cached, in-memory access to Country and StateProvince
|
|
14
|
-
* reference data
|
|
15
|
-
* are O(1) via pre-built Maps keyed by common lookup patterns.
|
|
14
|
+
* reference data, plus point-in-polygon resolution against country/state boundaries.
|
|
15
|
+
* All lookups are O(1) via pre-built Maps keyed by common lookup patterns.
|
|
16
|
+
*
|
|
17
|
+
* **Loaded on demand**, not at app startup. The dataset is large (~3,000+ rows
|
|
18
|
+
* with BoundaryGeoJSON blobs) and parsing the geometry takes ~3–4s synchronously,
|
|
19
|
+
* so we only pay that cost when geocoding or geo lookups are actually needed.
|
|
20
|
+
*
|
|
21
|
+
* **Caller contract**: `await GeoDataEngine.Instance.Config(...)` once before
|
|
22
|
+
* calling any sync lookup method. `Config()` is idempotent — concurrent calls
|
|
23
|
+
* dedup against a single in-flight load (see `BaseEngine.Load`), and repeated
|
|
24
|
+
* calls after load complete return immediately. If no entity in the tenant has
|
|
25
|
+
* `SupportsGeoCoding=1`, `Config()` returns early and lookups will return
|
|
26
|
+
* `undefined` — callers already handle the not-found case so the empty state
|
|
27
|
+
* is safe to leave in place.
|
|
16
28
|
*
|
|
17
29
|
* Usage:
|
|
18
30
|
* ```typescript
|
|
19
|
-
*
|
|
20
|
-
* const country =
|
|
21
|
-
* const state =
|
|
31
|
+
* await GeoDataEngine.Instance.Config(false, contextUser);
|
|
32
|
+
* const country = GeoDataEngine.Instance.GetCountryByISO2('US');
|
|
33
|
+
* const state = GeoDataEngine.Instance.GetStateByCode(country.ID, 'CO');
|
|
22
34
|
* ```
|
|
23
35
|
*/
|
|
24
36
|
export declare class GeoDataEngine extends BaseEngine<GeoDataEngine> {
|
|
@@ -120,20 +132,42 @@ export declare class GeoDataEngine extends BaseEngine<GeoDataEngine> {
|
|
|
120
132
|
*/
|
|
121
133
|
private rayCast;
|
|
122
134
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
135
|
+
* The Web Worker source code for GeoJSON parsing. This is embedded as a string
|
|
136
|
+
* so we can create an inline Worker via Blob URL — no separate file needed.
|
|
137
|
+
* The worker receives raw BoundaryGeoJSON strings and returns parsed geometries.
|
|
138
|
+
*/
|
|
139
|
+
private static readonly GEO_WORKER_SOURCE;
|
|
140
|
+
/**
|
|
141
|
+
* Parse all BoundaryGeoJSON data using a Web Worker (off main thread).
|
|
142
|
+
* Falls back to synchronous parsing if Workers are unavailable.
|
|
143
|
+
*/
|
|
144
|
+
private buildGeometryCachesAsync;
|
|
145
|
+
/**
|
|
146
|
+
* Offload GeoJSON parsing to an inline Web Worker.
|
|
147
|
+
* Returns a promise that resolves with the parsed geometry arrays.
|
|
148
|
+
*/
|
|
149
|
+
private parseInWorker;
|
|
150
|
+
/**
|
|
151
|
+
* Index state geometries by country for fast lookup.
|
|
152
|
+
* Used after both worker and sync parsing paths.
|
|
153
|
+
*/
|
|
154
|
+
private indexStateGeometries;
|
|
155
|
+
/**
|
|
156
|
+
* Synchronous fallback for environments without Web Workers (e.g., Node.js, SSR).
|
|
125
157
|
*/
|
|
126
|
-
private
|
|
158
|
+
private buildGeometryCachesSync;
|
|
127
159
|
/**
|
|
128
160
|
* Parse a BoundaryGeoJSON value into a CachedGeometry.
|
|
129
161
|
* Supports GeoJSON Feature, Polygon, and MultiPolygon types.
|
|
130
162
|
* Returns null if the boundary is missing or unparseable.
|
|
163
|
+
* Used by the synchronous fallback path.
|
|
131
164
|
*/
|
|
132
165
|
private parseEntityBoundary;
|
|
133
166
|
/**
|
|
134
167
|
* Parse a single Polygon's coordinate rings and compute its bounding box.
|
|
135
168
|
* GeoJSON Polygon coordinates: [ outerRing, ...holeRings ]
|
|
136
169
|
* Each ring is an array of [lng, lat] pairs.
|
|
170
|
+
* Used by the synchronous fallback path.
|
|
137
171
|
*/
|
|
138
172
|
private parsePolygonCoordinates;
|
|
139
173
|
private buildLookupMaps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoDataEngine.d.ts","sourceRoot":"","sources":["../../src/engines/GeoDataEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"GeoDataEngine.d.ts","sourceRoot":"","sources":["../../src/engines/GeoDataEngine.ts"],"names":[],"mappings":"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"}
|