@encodeagent/platform-helper-util 1.2508.1241505
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/README.md +121 -0
- package/dist/__tests__/core.test.d.ts +5 -0
- package/dist/__tests__/core.test.d.ts.map +1 -0
- package/dist/__tests__/core.test.js +128 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/__tests__/shortid.test.d.ts +5 -0
- package/dist/__tests__/shortid.test.d.ts.map +1 -0
- package/dist/__tests__/shortid.test.js +72 -0
- package/dist/__tests__/shortid.test.js.map +1 -0
- package/dist/__tests__/slug.test.d.ts +5 -0
- package/dist/__tests__/slug.test.d.ts.map +1 -0
- package/dist/__tests__/slug.test.js +31 -0
- package/dist/__tests__/slug.test.js.map +1 -0
- package/dist/__tests__/token.test.d.ts +5 -0
- package/dist/__tests__/token.test.d.ts.map +1 -0
- package/dist/__tests__/token.test.js +49 -0
- package/dist/__tests__/token.test.js.map +1 -0
- package/dist/__tests__/uuid.test.d.ts +5 -0
- package/dist/__tests__/uuid.test.d.ts.map +1 -0
- package/dist/__tests__/uuid.test.js +42 -0
- package/dist/__tests__/uuid.test.js.map +1 -0
- package/dist/__tests__/value-of-object.test.d.ts +5 -0
- package/dist/__tests__/value-of-object.test.d.ts.map +1 -0
- package/dist/__tests__/value-of-object.test.js +49 -0
- package/dist/__tests__/value-of-object.test.js.map +1 -0
- package/dist/ai/llm.d.ts +90 -0
- package/dist/ai/llm.d.ts.map +1 -0
- package/dist/ai/llm.js +524 -0
- package/dist/ai/llm.js.map +1 -0
- package/dist/ai/model.d.ts +14 -0
- package/dist/ai/model.d.ts.map +1 -0
- package/dist/ai/model.js +120 -0
- package/dist/ai/model.js.map +1 -0
- package/dist/ai/types.d.ts +85 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +15 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/util.d.ts +28 -0
- package/dist/ai/util.d.ts.map +1 -0
- package/dist/ai/util.js +43 -0
- package/dist/ai/util.js.map +1 -0
- package/dist/auth.d.ts +34 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +568 -0
- package/dist/auth.js.map +1 -0
- package/dist/colors.d.ts +79 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +492 -0
- package/dist/colors.js.map +1 -0
- package/dist/constants.d.ts +86 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2578 -0
- package/dist/constants.js.map +1 -0
- package/dist/core.d.ts +337 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +1165 -0
- package/dist/core.js.map +1 -0
- package/dist/cost.d.ts +35 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +143 -0
- package/dist/cost.js.map +1 -0
- package/dist/file.d.ts +55 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +273 -0
- package/dist/file.js.map +1 -0
- package/dist/html.d.ts +44 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +420 -0
- package/dist/html.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +313 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +20 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +38 -0
- package/dist/markdown.js.map +1 -0
- package/dist/metadata.d.ts +39 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +110 -0
- package/dist/metadata.js.map +1 -0
- package/dist/record.d.ts +67 -0
- package/dist/record.d.ts.map +1 -0
- package/dist/record.js +404 -0
- package/dist/record.js.map +1 -0
- package/dist/shortid.d.ts +42 -0
- package/dist/shortid.d.ts.map +1 -0
- package/dist/shortid.js +42 -0
- package/dist/shortid.js.map +1 -0
- package/dist/slug.d.ts +24 -0
- package/dist/slug.d.ts.map +1 -0
- package/dist/slug.js +43 -0
- package/dist/slug.js.map +1 -0
- package/dist/token.d.ts +34 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +20 -0
- package/dist/token.js.map +1 -0
- package/dist/tree.d.ts +27 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +193 -0
- package/dist/tree.js.map +1 -0
- package/dist/types.d.ts +270 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +25 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +32 -0
- package/dist/uuid.js.map +1 -0
- package/dist/value-of-object.d.ts +25 -0
- package/dist/value-of-object.d.ts.map +1 -0
- package/dist/value-of-object.js +123 -0
- package/dist/value-of-object.js.map +1 -0
- package/dist/web-content.d.ts +54 -0
- package/dist/web-content.d.ts.map +1 -0
- package/dist/web-content.js +268 -0
- package/dist/web-content.js.map +1 -0
- package/dist/web.d.ts +36 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +162 -0
- package/dist/web.js.map +1 -0
- package/package.json +68 -0
package/dist/auth.js
ADDED
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Authentication and authorization utilities including password validation, token verification, and security functions
|
|
4
|
+
* @copyright PrimeObjects Software Inc. (C) 2024 All Rights Reserved
|
|
5
|
+
* @author EncodeAgent Team.
|
|
6
|
+
* @copyright © 2024 PrimeObjects Software Inc. All rights reserved.
|
|
7
|
+
* @license Proprietary - Subject to PrimeObjects License Agreements
|
|
8
|
+
* @contact encode.agent@primeobjects.com
|
|
9
|
+
* @website https://www.encodeagent.com/
|
|
10
|
+
*
|
|
11
|
+
* This software contains proprietary and confidential information of
|
|
12
|
+
* PrimeObjects Software Inc. Any reproduction or distribution of this
|
|
13
|
+
* software, in whole or in part, without written permission of
|
|
14
|
+
* PrimeObjects Software Inc. is strictly prohibited.
|
|
15
|
+
*
|
|
16
|
+
* Unauthorized copying of this file, via any medium, is strictly prohibited.
|
|
17
|
+
* This file is proprietary and confidential.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.hasRole = exports.hasAllRoles = exports.hasAnyRole = exports.hasMemberRole = exports.isOwner = exports.isMember = exports.hasPrivilege = exports.isAuthor = exports.isReader = exports.checkPrivilege = exports.checkEntityPrivilege = exports.checkPrivileges = exports.hasLicense = exports.checkLicenses = exports.recordOwnedByOrganization = exports.checkRecordPrivilege = void 0;
|
|
21
|
+
const lodash_1 = require("lodash");
|
|
22
|
+
const constants_1 = require("./constants");
|
|
23
|
+
const core_1 = require("./core");
|
|
24
|
+
const metadata_1 = require("./metadata");
|
|
25
|
+
const checkRecordPrivilege = (context, record, prType) => {
|
|
26
|
+
if (!(0, core_1.isObject)(record)) {
|
|
27
|
+
if ((0, core_1.appTrackIsOn)())
|
|
28
|
+
console.log("NO_RECORD");
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return (0, exports.checkPrivilege)(context, undefined, undefined, record, prType);
|
|
32
|
+
};
|
|
33
|
+
exports.checkRecordPrivilege = checkRecordPrivilege;
|
|
34
|
+
const recordOwnedByOrganization = (user, record) => {
|
|
35
|
+
const recordOrganizationId = record?.organizationId;
|
|
36
|
+
const userOrganizationId = user?.organizationId;
|
|
37
|
+
return ((0, core_1.isNonEmptyString)(recordOrganizationId) &&
|
|
38
|
+
(0, core_1.isNonEmptyString)(userOrganizationId) &&
|
|
39
|
+
(0, core_1.sameGuid)(recordOrganizationId, userOrganizationId));
|
|
40
|
+
};
|
|
41
|
+
exports.recordOwnedByOrganization = recordOwnedByOrganization;
|
|
42
|
+
const checkLicenses = (context, featureOrEntityName) => {
|
|
43
|
+
const trackPrefix = "checkLicenses";
|
|
44
|
+
if ((0, lodash_1.isNil)(context?.solution)) {
|
|
45
|
+
if ((0, core_1.appTrackIsOn)())
|
|
46
|
+
console.log(`${trackPrefix}.solutionNotFound Skip Licenses Check`, {
|
|
47
|
+
context,
|
|
48
|
+
featureOrEntityName
|
|
49
|
+
});
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if ((0, lodash_1.isNil)(context?.user)) {
|
|
53
|
+
if ((0, core_1.appTrackIsOn)())
|
|
54
|
+
console.log(`${trackPrefix}.userNotFound`, {
|
|
55
|
+
context,
|
|
56
|
+
featureOrEntityName
|
|
57
|
+
});
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
|
|
61
|
+
return true;
|
|
62
|
+
const { user, solution } = context;
|
|
63
|
+
//Root Admin has all permission
|
|
64
|
+
// if (isRootAdmin(context)) return true;
|
|
65
|
+
if (!(0, core_1.isNonEmptyString)(featureOrEntityName)) {
|
|
66
|
+
if ((0, core_1.appTrackIsOn)())
|
|
67
|
+
console.log(`${trackPrefix}.noFeatureOrEntityName`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
//Get solution licenses
|
|
71
|
+
let solutionLicenses = solution?.licenses ?? [];
|
|
72
|
+
if (!(0, lodash_1.isArray)(solutionLicenses))
|
|
73
|
+
solutionLicenses = [];
|
|
74
|
+
//If there's no license for the solution, we will not check the license
|
|
75
|
+
if ((0, lodash_1.isArray)(solutionLicenses) && solutionLicenses.length == 0)
|
|
76
|
+
return true;
|
|
77
|
+
//If user has no license for user, we will try the default license in solution
|
|
78
|
+
const userLicenses = (0, lodash_1.isArray)(user.licenses) ? user.licenses.slice() : [];
|
|
79
|
+
(0, lodash_1.each)(solutionLicenses, (solutionLicense) => {
|
|
80
|
+
//if there's default license, add it to userLicenses
|
|
81
|
+
if (solutionLicense.isDefault === true)
|
|
82
|
+
userLicenses.push(solutionLicense.name);
|
|
83
|
+
});
|
|
84
|
+
let pass = false;
|
|
85
|
+
(0, lodash_1.each)(userLicenses, (userLicense) => {
|
|
86
|
+
//only check if it does not pass
|
|
87
|
+
if (!pass) {
|
|
88
|
+
const solutionLicense = (0, lodash_1.find)(solutionLicenses, (l) => l.name.toLowerCase() === userLicense.toLowerCase());
|
|
89
|
+
if (solutionLicense) {
|
|
90
|
+
//pass if the user has the license and the license has feature that is featureOrEntityName
|
|
91
|
+
pass = (0, lodash_1.find)(solutionLicense.features, (f) => f.trim().toLowerCase() ===
|
|
92
|
+
featureOrEntityName.trim().toLowerCase());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (!pass && (0, core_1.appTrackIsOn)())
|
|
97
|
+
console.log(`${trackPrefix}.noPass`, {
|
|
98
|
+
userLicenses,
|
|
99
|
+
featureOrEntityName
|
|
100
|
+
});
|
|
101
|
+
return pass;
|
|
102
|
+
};
|
|
103
|
+
exports.checkLicenses = checkLicenses;
|
|
104
|
+
const hasLicense = (context, name) => {
|
|
105
|
+
const { user, solution } = context;
|
|
106
|
+
const trackPrefix = "hasLicense";
|
|
107
|
+
if (!(0, core_1.isNonEmptyString)(name)) {
|
|
108
|
+
if ((0, core_1.appTrackIsOn)())
|
|
109
|
+
console.log(`${trackPrefix}.noName`);
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (!(0, core_1.isObject)(user)) {
|
|
113
|
+
if ((0, core_1.appTrackIsOn)())
|
|
114
|
+
console.log(`${trackPrefix}.noUser`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if ((0, lodash_1.isNil)(solution)) {
|
|
118
|
+
if ((0, core_1.appTrackIsOn)())
|
|
119
|
+
console.log(`${trackPrefix}.noSolution`);
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
//Get solution licenses
|
|
123
|
+
let solutionLicenses = solution?.licenses ?? [];
|
|
124
|
+
if (!(0, lodash_1.isArray)(solutionLicenses))
|
|
125
|
+
solutionLicenses = [];
|
|
126
|
+
//If there's no license for the solution, we will not check the license
|
|
127
|
+
if ((0, lodash_1.isArray)(solutionLicenses) && solutionLicenses.length == 0)
|
|
128
|
+
return true;
|
|
129
|
+
//If user has no license for user, we will fail the user
|
|
130
|
+
const userLicenses = (0, lodash_1.isArray)(user.licenses) ? user.licenses : [];
|
|
131
|
+
if (userLicenses.length == 0)
|
|
132
|
+
return false;
|
|
133
|
+
return (0, lodash_1.find)(userLicenses, (userLicense) => {
|
|
134
|
+
return name.toLowerCase() === userLicense.toLowerCase();
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
exports.hasLicense = hasLicense;
|
|
138
|
+
const checkPrivileges = (context, privileges, op, checkEntityExistFunc) => {
|
|
139
|
+
const trackPrefix = "checkPrivileges";
|
|
140
|
+
const { user } = context;
|
|
141
|
+
if (!(0, core_1.isObject)(user)) {
|
|
142
|
+
if ((0, core_1.appTrackIsOn)())
|
|
143
|
+
console.log(`${trackPrefix}.noUser`);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
|
|
147
|
+
return true;
|
|
148
|
+
if (!(0, lodash_1.isFunction)(checkEntityExistFunc))
|
|
149
|
+
checkEntityExistFunc = metadata_1.getEntity;
|
|
150
|
+
if (!(0, lodash_1.isArray)(privileges))
|
|
151
|
+
return true;
|
|
152
|
+
if (privileges.length == 0)
|
|
153
|
+
return true;
|
|
154
|
+
let pass = op === "and";
|
|
155
|
+
let check = false;
|
|
156
|
+
(0, lodash_1.each)(privileges, (privilege) => {
|
|
157
|
+
const privilegeInfo = privilege.split(".");
|
|
158
|
+
switch (privilegeInfo[0].toUpperCase()) {
|
|
159
|
+
case "USER": {
|
|
160
|
+
if (privilegeInfo[1] == "Current" && user)
|
|
161
|
+
check = true;
|
|
162
|
+
if (privilegeInfo[1] == "Anonymous" &&
|
|
163
|
+
(!user || (user && !user.id)))
|
|
164
|
+
check = true;
|
|
165
|
+
pass = op === "and" ? pass && check : pass || check;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case "ENTITY": {
|
|
169
|
+
check =
|
|
170
|
+
checkEntityExistFunc(context, privilegeInfo[1], privilegeInfo.length > 2 ? privilegeInfo[2] : null) &&
|
|
171
|
+
(0, exports.checkEntityPrivilege)(context, privilegeInfo[1], privilegeInfo.length > 2 ? privilegeInfo[2] : undefined, privilegeInfo.length > 3 &&
|
|
172
|
+
(0, core_1.isNonEmptyString)(privilegeInfo[3])
|
|
173
|
+
? privilegeInfo[3]
|
|
174
|
+
: "read");
|
|
175
|
+
pass = op === "and" ? pass && check : pass || check;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case "ROLE": {
|
|
179
|
+
check = !(0, lodash_1.isNil)((0, exports.hasRole)(context, privilegeInfo[1]));
|
|
180
|
+
pass = op === "and" ? pass && check : pass || check;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case "HAS_LICENSE": {
|
|
184
|
+
check = (0, exports.hasLicense)(context, privilegeInfo[1]);
|
|
185
|
+
pass = op === "and" ? pass && check : pass || check;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case "HAS_NO_LICENSE": {
|
|
189
|
+
check = !(0, exports.hasLicense)(context, privilegeInfo[1]);
|
|
190
|
+
pass = op === "and" ? pass && check : pass || check;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (!check && (0, core_1.appTrackIsOn)()) {
|
|
195
|
+
console.log(`${trackPrefix}.${privilege}`, {
|
|
196
|
+
privilegeInfo,
|
|
197
|
+
context
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
if (!pass && (0, core_1.appTrackIsOn)())
|
|
202
|
+
console.log(`${trackPrefix}.noPass`, { privileges });
|
|
203
|
+
return pass;
|
|
204
|
+
};
|
|
205
|
+
exports.checkPrivileges = checkPrivileges;
|
|
206
|
+
const checkEntityPrivilege = (context, entityName, entityType, prType) => {
|
|
207
|
+
if ((0, exports.hasRole)(context, "SOLUTION-ADMIN"))
|
|
208
|
+
return true;
|
|
209
|
+
if (!(0, core_1.isNonEmptyString)(entityName))
|
|
210
|
+
return false;
|
|
211
|
+
//Root Admin has all permission
|
|
212
|
+
//if (isRootAdmin(context)) return true;
|
|
213
|
+
const trackPrefix = "checkEntityPrivilege";
|
|
214
|
+
prType = (0, core_1.isNonEmptyString)(prType) ? prType?.toLowerCase() : "read";
|
|
215
|
+
if (!(0, exports.checkLicenses)(context, (0, core_1.isNonEmptyString)(entityType)
|
|
216
|
+
? `Entity.${entityName}.${entityType}`
|
|
217
|
+
: `Entity.${entityName}`)) {
|
|
218
|
+
if ((0, core_1.appTrackIsOn)())
|
|
219
|
+
console.log(`${trackPrefix}.${prType}.checkLicenses`, {
|
|
220
|
+
entityName,
|
|
221
|
+
entityType,
|
|
222
|
+
prType
|
|
223
|
+
});
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
//if user has license and looking for read permission to an entity, it will be allowed by default
|
|
228
|
+
if (prType === "read")
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
return (0, exports.checkPrivilege)(context, entityName, entityType, undefined, prType);
|
|
232
|
+
};
|
|
233
|
+
exports.checkEntityPrivilege = checkEntityPrivilege;
|
|
234
|
+
const checkPrivilege = (context, entityName, entityType, record, prType) => {
|
|
235
|
+
if ((0, exports.hasRole)(context, "SOLUTION-ADMIN", record))
|
|
236
|
+
return true;
|
|
237
|
+
let { organization, user, solution } = context;
|
|
238
|
+
const trackPrefix = "checkPrivilege";
|
|
239
|
+
if (!organization?.id) {
|
|
240
|
+
organization = { id: context.organizationId };
|
|
241
|
+
}
|
|
242
|
+
if (!user?.id || !user?.organizationId) {
|
|
243
|
+
user = { id: context.userId, organizationId: organization.id };
|
|
244
|
+
}
|
|
245
|
+
if (!solution?.id) {
|
|
246
|
+
solution = { id: context.solutionId };
|
|
247
|
+
}
|
|
248
|
+
let result = false;
|
|
249
|
+
//privilege type is required, if not being provided, it is by default read
|
|
250
|
+
if (!prType)
|
|
251
|
+
prType = "read";
|
|
252
|
+
prType = prType.toLowerCase();
|
|
253
|
+
if (!record) {
|
|
254
|
+
record = {
|
|
255
|
+
id: constants_1.GUID_EMPTY,
|
|
256
|
+
entityName,
|
|
257
|
+
entityType,
|
|
258
|
+
organizationId: organization.id
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
entityName = record.entityName;
|
|
263
|
+
entityType = record.entityType;
|
|
264
|
+
}
|
|
265
|
+
if (prType === "read" && record.isGlobal == true) {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
//get the entity profile
|
|
269
|
+
const entity = (0, metadata_1.getEntity)(solution, entityName ? entityName : "", entityType) ??
|
|
270
|
+
!solution?.entities //if there is solution.entities provided, we will respect it.
|
|
271
|
+
? {
|
|
272
|
+
entityName: record?.entityName,
|
|
273
|
+
entityType: record?.entityType,
|
|
274
|
+
fromRecord: true
|
|
275
|
+
}
|
|
276
|
+
: undefined;
|
|
277
|
+
//entity has to be valid
|
|
278
|
+
if (!entity?.entityName) {
|
|
279
|
+
if ((0, core_1.appTrackIsOn)())
|
|
280
|
+
console.log(`${trackPrefix}.noEntity`, {
|
|
281
|
+
solution,
|
|
282
|
+
entityName,
|
|
283
|
+
entityType
|
|
284
|
+
});
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
//respect disableDelete, disableCreate or disableUpdate
|
|
288
|
+
if (prType === "delete" &&
|
|
289
|
+
(record.disableDelete ||
|
|
290
|
+
entity?.disableDelete ||
|
|
291
|
+
((0, core_1.isObject)(record.system) && record.system.disableDelete))) {
|
|
292
|
+
if ((0, core_1.appTrackIsOn)())
|
|
293
|
+
console.log(`${trackPrefix}.disableDelete,${trackPrefix}.system`, {
|
|
294
|
+
record,
|
|
295
|
+
entity,
|
|
296
|
+
user
|
|
297
|
+
});
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (prType === "update" &&
|
|
301
|
+
(record.disableUpdate ||
|
|
302
|
+
entity?.disableUpdate ||
|
|
303
|
+
((0, core_1.isObject)(record.system) && record.system.disableUpdate))) {
|
|
304
|
+
if ((0, core_1.appTrackIsOn)())
|
|
305
|
+
console.log(`${trackPrefix}.disableUpdate,${trackPrefix}.system`, {
|
|
306
|
+
record,
|
|
307
|
+
entity,
|
|
308
|
+
user
|
|
309
|
+
});
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
if (prType === "create" && entity?.disableCreate) {
|
|
313
|
+
if ((0, core_1.appTrackIsOn)())
|
|
314
|
+
console.log(`${trackPrefix}.disableCreate`, { entity });
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
//Rules to special user --- START
|
|
318
|
+
//All in all the user has to have license to the entity
|
|
319
|
+
if (!(0, exports.checkLicenses)(context, `Entity.${entityName}`)) {
|
|
320
|
+
if ((0, core_1.appTrackIsOn)())
|
|
321
|
+
console.log(`${trackPrefix}.noEntityLicense`, {
|
|
322
|
+
context,
|
|
323
|
+
entityName
|
|
324
|
+
});
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
if ((0, core_1.isNonEmptyString)(entityType) &&
|
|
328
|
+
!(0, exports.checkLicenses)(context, `Entity.${entityName}.${entityType}`)) {
|
|
329
|
+
if ((0, core_1.appTrackIsOn)())
|
|
330
|
+
console.log(`${trackPrefix}.noEntityLicense`, {
|
|
331
|
+
context,
|
|
332
|
+
entityType,
|
|
333
|
+
entityName
|
|
334
|
+
});
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
//ORG-ADMIN or owner of the organization has all permissions to the records in the org
|
|
338
|
+
if ((0, exports.hasRole)(context, "ORG-ADMIN") &&
|
|
339
|
+
(!record || record.organizationId == user.organizationId)) {
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
//Rules to special user --- END
|
|
343
|
+
if (prType === "create")
|
|
344
|
+
record.organizationId = organization.id;
|
|
345
|
+
//can not delete or update a record that does not exist
|
|
346
|
+
if (prType === "delete" && ((0, core_1.isEmptyGuid)(record.id) || !record.id)) {
|
|
347
|
+
if ((0, core_1.appTrackIsOn)())
|
|
348
|
+
console.log(`${trackPrefix}.noDelete.noRecord`, { record });
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
//if it is update and without record id, it may be a upsert, we will make sure there's permission to create
|
|
352
|
+
if (prType === "update" && ((0, core_1.isEmptyGuid)(record.id) || !record.id)) {
|
|
353
|
+
return (0, exports.checkPrivilege)(context, entityName, entityType, record, "create");
|
|
354
|
+
}
|
|
355
|
+
//Owner of the record has all permission to the record.
|
|
356
|
+
if ((0, exports.isOwner)(user, record))
|
|
357
|
+
return true;
|
|
358
|
+
//User don't have any permission to any record outside of the current organization
|
|
359
|
+
if (record.id != constants_1.GUID_EMPTY && !(0, exports.recordOwnedByOrganization)(user, record)) {
|
|
360
|
+
if ((0, core_1.appTrackIsOn)())
|
|
361
|
+
console.log(`${trackPrefix}.recordOutOfOrg`, { record, user });
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
//Check privileges defined in the roles of the user
|
|
365
|
+
//Check whether user has permission to all privilege Types of the entity, the second all also mean to all records
|
|
366
|
+
result = (0, exports.hasPrivilege)(context, entityName + ".All.All");
|
|
367
|
+
if (result)
|
|
368
|
+
return true;
|
|
369
|
+
result = (0, exports.hasPrivilege)(context, entityName + "." + prType + ".All");
|
|
370
|
+
if (result)
|
|
371
|
+
return true;
|
|
372
|
+
//Check whether user has permission to all privilege Types of the entity, there's no second all, it mean to all user's own record
|
|
373
|
+
result = (0, exports.hasPrivilege)(context, entityName + ".All");
|
|
374
|
+
if ((0, core_1.isEmptyGuid)(record.id) && result)
|
|
375
|
+
return true;
|
|
376
|
+
//Check whether user has permission to the requested privilege Type of the entity
|
|
377
|
+
result = (0, exports.hasPrivilege)(context, entityName + "." + prType);
|
|
378
|
+
if ((0, core_1.isEmptyGuid)(record.id) && result)
|
|
379
|
+
return true;
|
|
380
|
+
if (prType !== "create" && (0, core_1.isEmptyGuid)(record.id)) {
|
|
381
|
+
if ((0, core_1.appTrackIsOn)())
|
|
382
|
+
console.log(`${trackPrefix}.isEmptyGuid(record.id`, { record });
|
|
383
|
+
return false;
|
|
384
|
+
}
|
|
385
|
+
//Start from here we check record related privilege
|
|
386
|
+
switch (prType) {
|
|
387
|
+
case "read": {
|
|
388
|
+
//only reader can read the record or isGlobal is true
|
|
389
|
+
result = (0, exports.isReader)(context, record.security) || record.isGlobal;
|
|
390
|
+
//TODO: Now we give pass without checking Reader
|
|
391
|
+
//In the future, we should use role name or depth to decision whether a user can read/update any record
|
|
392
|
+
result = true;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
case "change-owner": {
|
|
396
|
+
//Some entity can not change ownership
|
|
397
|
+
if (entityName == "user" || entityName == "organization")
|
|
398
|
+
return false;
|
|
399
|
+
//only owner of the record can change the record ownership
|
|
400
|
+
result = (0, core_1.sameGuid)(record.ownerBy, user.id);
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
default: {
|
|
404
|
+
//Author & owner can do anything to a record,
|
|
405
|
+
//In the code above we have handled isOwner case
|
|
406
|
+
result = (0, exports.isAuthor)(context, record.security);
|
|
407
|
+
result = true;
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
if (!result && (0, core_1.appTrackIsOn)())
|
|
412
|
+
console.log(`${trackPrefix}.final`, { entityName, entityType, record });
|
|
413
|
+
return result;
|
|
414
|
+
};
|
|
415
|
+
exports.checkPrivilege = checkPrivilege;
|
|
416
|
+
const isReader = (context, security) => {
|
|
417
|
+
const { user } = context;
|
|
418
|
+
var result = (0, lodash_1.find)(security, (s) => s == "r." + user.id ||
|
|
419
|
+
s == "a." + user.id ||
|
|
420
|
+
s == "r." + constants_1.GUID_EMPTY ||
|
|
421
|
+
s == "a." + constants_1.GUID_EMPTY);
|
|
422
|
+
if (result)
|
|
423
|
+
return result ? true : false;
|
|
424
|
+
(0, lodash_1.each)(user.teamIds, (tid) => {
|
|
425
|
+
if (!result)
|
|
426
|
+
result = (0, lodash_1.find)(security, (s) => s == "r." + tid || s == "a." + tid);
|
|
427
|
+
});
|
|
428
|
+
return result ? true : false;
|
|
429
|
+
};
|
|
430
|
+
exports.isReader = isReader;
|
|
431
|
+
const isAuthor = (context, security) => {
|
|
432
|
+
const { user } = context;
|
|
433
|
+
var result = (0, lodash_1.find)(security, (s) => s == "a." + user.id || s == "a." + constants_1.GUID_EMPTY);
|
|
434
|
+
if (result)
|
|
435
|
+
return result ? true : false;
|
|
436
|
+
(0, lodash_1.each)(user.teamIds, (tid) => {
|
|
437
|
+
if (!result)
|
|
438
|
+
result = (0, lodash_1.find)(security, (s) => s == "a." + tid);
|
|
439
|
+
});
|
|
440
|
+
return result ? true : false;
|
|
441
|
+
};
|
|
442
|
+
exports.isAuthor = isAuthor;
|
|
443
|
+
//Check whether the user has a certain privilege based the user roles
|
|
444
|
+
const hasPrivilege = (context, privilege) => {
|
|
445
|
+
const { organization, user, solution } = context;
|
|
446
|
+
if (!privilege)
|
|
447
|
+
return false;
|
|
448
|
+
let result = false;
|
|
449
|
+
//if the user is the organization owner, it will has full permission
|
|
450
|
+
if (organization && (0, core_1.sameGuid)(user.id, organization.ownedBy))
|
|
451
|
+
return true;
|
|
452
|
+
if (!(0, lodash_1.isArray)(user.roles))
|
|
453
|
+
return false;
|
|
454
|
+
//get all roles in the current solution
|
|
455
|
+
var solutionRoles = solution?.roles ?? [];
|
|
456
|
+
//get all roles of the user
|
|
457
|
+
var userRoles = "," + user.roles.join().toLowerCase().replace(/ /g, "") + ",";
|
|
458
|
+
(0, lodash_1.each)(solutionRoles, (solutionRole) => {
|
|
459
|
+
//check whether user has the solution role
|
|
460
|
+
if (!result &&
|
|
461
|
+
solutionRole.value &&
|
|
462
|
+
userRoles.indexOf("," + solutionRole.value.toLowerCase() + ",") >=
|
|
463
|
+
0 &&
|
|
464
|
+
solutionRole.privileges) {
|
|
465
|
+
//get all privileges of the solution role
|
|
466
|
+
var privileges = "," +
|
|
467
|
+
solutionRole.privileges.toLowerCase().replace(/ /g, "") +
|
|
468
|
+
",";
|
|
469
|
+
//whether the privilege is being checked included in the role that the user has
|
|
470
|
+
result =
|
|
471
|
+
privileges.indexOf("," + privilege.toLowerCase() + ",") >= 0;
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
return result;
|
|
475
|
+
};
|
|
476
|
+
exports.hasPrivilege = hasPrivilege;
|
|
477
|
+
const isMember = (user, regarding) => {
|
|
478
|
+
if (!((0, core_1.isObject)(user) &&
|
|
479
|
+
(0, core_1.isNonEmptyString)(user.id) &&
|
|
480
|
+
(0, core_1.isNonEmptyString)(user.organizationId)))
|
|
481
|
+
return false;
|
|
482
|
+
if (!((0, core_1.isObject)(regarding) &&
|
|
483
|
+
user.organizationId == regarding.organizationId &&
|
|
484
|
+
(0, core_1.isObject)(user.membership)))
|
|
485
|
+
return false;
|
|
486
|
+
return (0, core_1.isObject)(user.membership[regarding.id]);
|
|
487
|
+
};
|
|
488
|
+
exports.isMember = isMember;
|
|
489
|
+
const isOwner = (user, regarding) => {
|
|
490
|
+
if (!((0, core_1.isObject)(user) &&
|
|
491
|
+
(0, core_1.isNonEmptyString)(user.id) &&
|
|
492
|
+
(0, core_1.isNonEmptyString)(user.organizationId)))
|
|
493
|
+
return false;
|
|
494
|
+
if (!((0, core_1.isObject)(regarding) &&
|
|
495
|
+
user.organizationId == regarding.organizationId))
|
|
496
|
+
return false;
|
|
497
|
+
return (0, core_1.sameGuid)(regarding.ownedBy, user.id);
|
|
498
|
+
};
|
|
499
|
+
exports.isOwner = isOwner;
|
|
500
|
+
const hasMemberRole = (user, regarding, roleName) => {
|
|
501
|
+
if (!(0, exports.isMember)(user, regarding))
|
|
502
|
+
return false;
|
|
503
|
+
return (0, lodash_1.find)(user.membership[regarding.id].roles, (r) => r == roleName)
|
|
504
|
+
? true
|
|
505
|
+
: false;
|
|
506
|
+
};
|
|
507
|
+
exports.hasMemberRole = hasMemberRole;
|
|
508
|
+
const hasAnyRole = (context, roleNames, record) => {
|
|
509
|
+
for (let i = 0; i < roleNames.length; i++) {
|
|
510
|
+
const result = (0, exports.hasRole)(context, roleNames[i], record);
|
|
511
|
+
if ((0, core_1.isNonEmptyString)(result))
|
|
512
|
+
return result;
|
|
513
|
+
}
|
|
514
|
+
return undefined;
|
|
515
|
+
};
|
|
516
|
+
exports.hasAnyRole = hasAnyRole;
|
|
517
|
+
const hasAllRoles = (context, roleNames, record) => {
|
|
518
|
+
if (roleNames.length == 0)
|
|
519
|
+
return false;
|
|
520
|
+
for (let i = 0; i < roleNames.length; i++) {
|
|
521
|
+
const result = (0, exports.hasRole)(context, roleNames[i], record);
|
|
522
|
+
if ((0, lodash_1.isNil)(result))
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
return true;
|
|
526
|
+
};
|
|
527
|
+
exports.hasAllRoles = hasAllRoles;
|
|
528
|
+
//check whether a user has a role
|
|
529
|
+
const hasRole = (context, roleName, record) => {
|
|
530
|
+
let { user, organizationId, organization } = context;
|
|
531
|
+
if (!(0, core_1.isObject)(user)) {
|
|
532
|
+
if ((0, core_1.appTrackIsOn)())
|
|
533
|
+
console.error("The context.user is not provided.");
|
|
534
|
+
return undefined;
|
|
535
|
+
}
|
|
536
|
+
if (user.organizationId != organizationId) {
|
|
537
|
+
if ((0, core_1.appTrackIsOn)())
|
|
538
|
+
console.error("The user.organizationId and context.organizationId does not match.");
|
|
539
|
+
return undefined;
|
|
540
|
+
}
|
|
541
|
+
if (!(0, core_1.isNonEmptyString)(roleName)) {
|
|
542
|
+
if ((0, core_1.appTrackIsOn)())
|
|
543
|
+
console.error("The roleName is not provided.");
|
|
544
|
+
return undefined;
|
|
545
|
+
}
|
|
546
|
+
if (roleName == "ORG-ADMIN") {
|
|
547
|
+
if (((0, core_1.isObject)(record) &&
|
|
548
|
+
(0, core_1.isObject)(organization) &&
|
|
549
|
+
(0, core_1.sameGuid)(organization.ownedBy, user.id) &&
|
|
550
|
+
(0, core_1.sameGuid)(organization.id, record?.organizationId)) ||
|
|
551
|
+
(!(0, core_1.isObject)(record) &&
|
|
552
|
+
(0, core_1.isObject)(organization) &&
|
|
553
|
+
(0, core_1.sameGuid)(organization.ownedBy, user.id))) {
|
|
554
|
+
return "ORG-ADMIN";
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
if (!(0, lodash_1.isArray)(user.roles)) {
|
|
558
|
+
if ((0, core_1.appTrackIsOn)())
|
|
559
|
+
console.error("The user.roles does not exit.");
|
|
560
|
+
return undefined;
|
|
561
|
+
}
|
|
562
|
+
const role = (0, lodash_1.find)(user.roles, (role) => {
|
|
563
|
+
return role.toLowerCase() == roleName.toLowerCase();
|
|
564
|
+
});
|
|
565
|
+
return role;
|
|
566
|
+
};
|
|
567
|
+
exports.hasRole = hasRole;
|
|
568
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|