easywork-common-lib 1.0.1022 → 1.0.1024

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/common/enums/common.enum.d.ts +14 -0
  2. package/dist/common/enums/common.enum.js +17 -1
  3. package/dist/common/enums/common.enum.js.map +1 -1
  4. package/dist/entities/all-activities.entity.d.ts +38 -0
  5. package/dist/entities/all-activities.entity.js +261 -0
  6. package/dist/entities/all-activities.entity.js.map +1 -0
  7. package/dist/entities/index.d.ts +1 -0
  8. package/dist/entities/index.js +1 -0
  9. package/dist/entities/index.js.map +1 -1
  10. package/dist/modules/authorization/authorization.module.d.ts +26 -0
  11. package/dist/modules/authorization/authorization.module.js +105 -0
  12. package/dist/modules/authorization/authorization.module.js.map +1 -0
  13. package/dist/modules/authorization/config/resource-configurations.d.ts +12 -0
  14. package/dist/modules/authorization/config/resource-configurations.js +124 -0
  15. package/dist/modules/authorization/config/resource-configurations.js.map +1 -0
  16. package/dist/modules/authorization/decorators/contact-permissions.decorator.d.ts +13 -0
  17. package/dist/modules/authorization/decorators/contact-permissions.decorator.js +101 -0
  18. package/dist/modules/authorization/decorators/contact-permissions.decorator.js.map +1 -0
  19. package/dist/modules/authorization/decorators/permissions.decorator.d.ts +51 -0
  20. package/dist/modules/authorization/decorators/permissions.decorator.js +144 -0
  21. package/dist/modules/authorization/decorators/permissions.decorator.js.map +1 -0
  22. package/dist/modules/authorization/factories/resource-authorization.factory.d.ts +55 -0
  23. package/dist/modules/authorization/factories/resource-authorization.factory.js +184 -0
  24. package/dist/modules/authorization/factories/resource-authorization.factory.js.map +1 -0
  25. package/dist/modules/authorization/index.d.ts +7 -0
  26. package/dist/modules/authorization/index.js +24 -0
  27. package/dist/modules/authorization/index.js.map +1 -0
  28. package/dist/modules/authorization/interfaces/authorization.interface.d.ts +23 -0
  29. package/dist/modules/authorization/interfaces/authorization.interface.js +3 -0
  30. package/dist/modules/authorization/interfaces/authorization.interface.js.map +1 -0
  31. package/dist/modules/authorization/services/authorization.service.d.ts +25 -0
  32. package/dist/modules/authorization/services/authorization.service.js +139 -0
  33. package/dist/modules/authorization/services/authorization.service.js.map +1 -0
  34. package/dist/modules/authorization/services/dynamic-filter.service.d.ts +9 -0
  35. package/dist/modules/authorization/services/dynamic-filter.service.js +238 -0
  36. package/dist/modules/authorization/services/dynamic-filter.service.js.map +1 -0
  37. package/dist/modules/authorization/services/index.d.ts +7 -0
  38. package/dist/modules/authorization/services/index.js +24 -0
  39. package/dist/modules/authorization/services/index.js.map +1 -0
  40. package/dist/modules/authorization/services/modules/contact-authorization.service.d.ts +29 -0
  41. package/dist/modules/authorization/services/modules/contact-authorization.service.js +105 -0
  42. package/dist/modules/authorization/services/modules/contact-authorization.service.js.map +1 -0
  43. package/dist/modules/authorization/services/modules/index.d.ts +4 -0
  44. package/dist/modules/authorization/services/modules/index.js +21 -0
  45. package/dist/modules/authorization/services/modules/index.js.map +1 -0
  46. package/dist/modules/authorization/services/modules/lead-authorization.service.d.ts +27 -0
  47. package/dist/modules/authorization/services/modules/lead-authorization.service.js +96 -0
  48. package/dist/modules/authorization/services/modules/lead-authorization.service.js.map +1 -0
  49. package/dist/modules/authorization/services/modules/policy-authorization.service.d.ts +28 -0
  50. package/dist/modules/authorization/services/modules/policy-authorization.service.js +100 -0
  51. package/dist/modules/authorization/services/modules/policy-authorization.service.js.map +1 -0
  52. package/dist/modules/authorization/services/modules/task-authorization.service.d.ts +28 -0
  53. package/dist/modules/authorization/services/modules/task-authorization.service.js +100 -0
  54. package/dist/modules/authorization/services/modules/task-authorization.service.js.map +1 -0
  55. package/dist/modules/authorization/services/permission-cache.service.d.ts +10 -0
  56. package/dist/modules/authorization/services/permission-cache.service.js +48 -0
  57. package/dist/modules/authorization/services/permission-cache.service.js.map +1 -0
  58. package/dist/modules/authorization/services/permission-evaluator.service.d.ts +26 -0
  59. package/dist/modules/authorization/services/permission-evaluator.service.js +349 -0
  60. package/dist/modules/authorization/services/permission-evaluator.service.js.map +1 -0
  61. package/dist/modules/authorization/services/resource-access-filter.service.d.ts +20 -0
  62. package/dist/modules/authorization/services/resource-access-filter.service.js +406 -0
  63. package/dist/modules/authorization/services/resource-access-filter.service.js.map +1 -0
  64. package/dist/modules/authorization/services/resource-authorization.service.d.ts +47 -0
  65. package/dist/modules/authorization/services/resource-authorization.service.js +192 -0
  66. package/dist/modules/authorization/services/resource-authorization.service.js.map +1 -0
  67. package/dist/modules/index.d.ts +1 -0
  68. package/dist/modules/index.js +1 -0
  69. package/dist/modules/index.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var PermissionEvaluatorService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PermissionEvaluatorService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_1 = require("@nestjs/typeorm");
19
+ const typeorm_2 = require("typeorm");
20
+ const entities_1 = require("../../../entities/");
21
+ const common_2 = require("../../../common/");
22
+ const dynamic_filter_service_1 = require("./dynamic-filter.service");
23
+ const resource_configurations_1 = require("../config/resource-configurations");
24
+ let PermissionEvaluatorService = PermissionEvaluatorService_1 = class PermissionEvaluatorService {
25
+ permissionRepository;
26
+ dynamicFilterService;
27
+ logger = new common_1.Logger(PermissionEvaluatorService_1.name);
28
+ constructor(permissionRepository, dynamicFilterService) {
29
+ this.permissionRepository = permissionRepository;
30
+ this.dynamicFilterService = dynamicFilterService;
31
+ }
32
+ async evaluate(context) {
33
+ const rules = await this.getUserPermissionRules(context);
34
+ const result = await this.evaluateRules(rules, context);
35
+ return result;
36
+ }
37
+ async getUserPermissionRules(context) {
38
+ const permissions = await this.permissionRepository.find({
39
+ where: {
40
+ resource: context.resource,
41
+ isActive: true,
42
+ isDeleted: false,
43
+ },
44
+ });
45
+ const rules = [];
46
+ for (const permission of permissions) {
47
+ if (permission.rules && Array.isArray(permission.rules)) {
48
+ rules.push(...permission.rules);
49
+ }
50
+ }
51
+ return rules;
52
+ }
53
+ async evaluateRules(rules, context) {
54
+ const applicableRules = rules.filter((rule) => rule.action === context.action ||
55
+ rule.action === common_2.PermissionAction.MANAGE);
56
+ if (applicableRules.length === 0) {
57
+ return { allowed: false, reason: "No applicable rules found" };
58
+ }
59
+ const sortedRules = this.sortRulesByPermissiveness(applicableRules);
60
+ const results = await Promise.all(sortedRules.map((rule) => {
61
+ return this.evaluateRule(rule, context);
62
+ }));
63
+ const finalResult = this.combineResults(results);
64
+ return finalResult;
65
+ }
66
+ async evaluateRule(rule, context) {
67
+ const conditionsMet = await this.checkConditions(rule, context);
68
+ if (!conditionsMet) {
69
+ return { allowed: false, reason: "Conditions not met" };
70
+ }
71
+ const filters = await this.buildFiltersFromCriteria(rule, context);
72
+ return {
73
+ allowed: true,
74
+ scope: rule.scope,
75
+ filters,
76
+ };
77
+ }
78
+ async checkConditions(rule, context) {
79
+ if (!rule.conditions || rule.conditions.length === 0) {
80
+ return true;
81
+ }
82
+ const conditionChecks = rule.conditions.map((condition) => this.checkCondition(condition, rule, context));
83
+ const results = await Promise.all(conditionChecks);
84
+ return results.every((result) => result);
85
+ }
86
+ async checkCondition(condition, rule, context) {
87
+ const { user, targetEntity, resource } = context;
88
+ const config = (0, resource_configurations_1.getResourceConfig)(resource);
89
+ switch (condition) {
90
+ case common_2.PermissionCondition.ALWAYS:
91
+ return true;
92
+ case common_2.PermissionCondition.OWNER:
93
+ if (!targetEntity)
94
+ return true;
95
+ const createdByField = config.columnMappings.createdBy;
96
+ return targetEntity[createdByField] === user.id;
97
+ case common_2.PermissionCondition.ASSIGNED_TO:
98
+ if (!targetEntity)
99
+ return true;
100
+ const assignedToField = config.columnMappings.assignedTo;
101
+ const assignedTo = targetEntity[assignedToField];
102
+ if (Array.isArray(assignedTo)) {
103
+ return assignedTo.some((assignee) => assignee?.id === user.id || assignee === user.id);
104
+ }
105
+ return (assignedTo === user.id || (assignedTo && assignedTo.id === user.id));
106
+ case common_2.PermissionCondition.OBSERVER:
107
+ if (!targetEntity)
108
+ return true;
109
+ const observersField = config.columnMappings.observers;
110
+ const observers = targetEntity[observersField] || [];
111
+ if (Array.isArray(observers)) {
112
+ return observers.some((observer) => observer?.id === user.id || observer === user.id);
113
+ }
114
+ return observers === user.id;
115
+ case common_2.PermissionCondition.PARTICIPANT:
116
+ if (!targetEntity)
117
+ return true;
118
+ const participantsField = config.columnMappings.participants;
119
+ if (!participantsField)
120
+ return true;
121
+ const participants = targetEntity[participantsField] || [];
122
+ if (Array.isArray(participants)) {
123
+ return participants.some((participant) => participant?.id === user.id || participant === user.id);
124
+ }
125
+ return participants === user.id;
126
+ case common_2.PermissionCondition.SUBGROUP_SUPERVISOR:
127
+ const supervisedSubGroups = user.supervisedSubGroups || [];
128
+ if (supervisedSubGroups.length > 0)
129
+ return true;
130
+ const subGroupRepo = context.additionalContext?.subGroupRepository;
131
+ if (subGroupRepo) {
132
+ return await this.checkIsSubGroupSupervisor(user.id, subGroupRepo);
133
+ }
134
+ return false;
135
+ case common_2.PermissionCondition.SUBGROUP_MEMBER:
136
+ const assistantSubGroups = user.assistantSubGroups || [];
137
+ if (assistantSubGroups.length > 0)
138
+ return true;
139
+ const subGroupRepository = context.additionalContext?.subGroupRepository;
140
+ if (subGroupRepository) {
141
+ return await this.checkIsSubGroupMember(user.id, subGroupRepository);
142
+ }
143
+ return false;
144
+ case common_2.PermissionCondition.SAME_GROUP:
145
+ if (!targetEntity)
146
+ return true;
147
+ const groupIdField = config.columnMappings.groupId;
148
+ const entityGroupId = targetEntity[groupIdField];
149
+ if (!entityGroupId)
150
+ return true;
151
+ return (user.groups || []).some((g) => g.id === entityGroupId);
152
+ case common_2.PermissionCondition.SAME_TEAM:
153
+ const teamMemberIds = context.additionalContext?.teamMemberIds || [];
154
+ const userSubGroups = user.subGroups || [];
155
+ if (targetEntity && config.subGroupConfig?.relationField) {
156
+ const subGroupIdField = config.subGroupConfig.relationField;
157
+ const entitySubGroupId = targetEntity[subGroupIdField];
158
+ if (entitySubGroupId) {
159
+ const hasSubGroupAccess = userSubGroups.some((sg) => sg.id === entitySubGroupId);
160
+ const hasTeamAccess = teamMemberIds.length > 1;
161
+ return hasSubGroupAccess || hasTeamAccess;
162
+ }
163
+ }
164
+ const hasSubGroups = userSubGroups.length > 0;
165
+ const hasTeamMembers = teamMemberIds.length > 1;
166
+ return hasSubGroups || hasTeamMembers;
167
+ case common_2.PermissionCondition.ROLE_LEVEL:
168
+ const ruleWithLevels = rule;
169
+ if (!ruleWithLevels.minRoleLevel)
170
+ return true;
171
+ const userMaxLevel = Math.min(...user.roles.map((r) => r.level));
172
+ const minLevel = ruleWithLevels.minRoleLevel;
173
+ const maxLevel = ruleWithLevels.maxRoleLevel;
174
+ let levelCheck = true;
175
+ if (minLevel !== undefined) {
176
+ levelCheck = levelCheck && userMaxLevel >= minLevel;
177
+ }
178
+ if (maxLevel !== undefined) {
179
+ levelCheck = levelCheck && userMaxLevel <= maxLevel;
180
+ }
181
+ return levelCheck;
182
+ case common_2.PermissionCondition.TIME_BASED:
183
+ return this.checkTimeRestrictions(rule, targetEntity);
184
+ case common_2.PermissionCondition.STATUS_BASED:
185
+ return this.checkStatusRestrictions(rule, targetEntity);
186
+ default:
187
+ this.logger.warn(`Unknown condition: ${condition}`);
188
+ return false;
189
+ }
190
+ }
191
+ checkTimeRestrictions(rule, targetEntity) {
192
+ if (!rule.timeRestrictions || !targetEntity)
193
+ return true;
194
+ const now = new Date();
195
+ const { createdWithin, modifiedWithin } = rule.timeRestrictions;
196
+ if (createdWithin && targetEntity.createdAt) {
197
+ const createdAt = new Date(targetEntity.createdAt);
198
+ const hoursDiff = (now.getTime() - createdAt.getTime()) / (1000 * 60 * 60);
199
+ if (hoursDiff > createdWithin)
200
+ return false;
201
+ }
202
+ if (modifiedWithin && targetEntity.updatedAt) {
203
+ const updatedAt = new Date(targetEntity.updatedAt);
204
+ const hoursDiff = (now.getTime() - updatedAt.getTime()) / (1000 * 60 * 60);
205
+ if (hoursDiff > modifiedWithin)
206
+ return false;
207
+ }
208
+ return true;
209
+ }
210
+ checkStatusRestrictions(rule, targetEntity) {
211
+ if (!rule.statusRestrictions || !targetEntity)
212
+ return true;
213
+ return rule.statusRestrictions.includes(targetEntity.status);
214
+ }
215
+ async buildFiltersFromCriteria(rule, context) {
216
+ const ruleWithCriteria = rule;
217
+ if (!ruleWithCriteria.filterCriteria) {
218
+ return this.buildLegacyFilters(rule, context);
219
+ }
220
+ const assistantIds = context.additionalContext?.teamMemberIds ||
221
+ context.additionalContext?.assistantIds ||
222
+ [];
223
+ const enhancedContext = {
224
+ ...context,
225
+ additionalContext: {
226
+ ...context.additionalContext,
227
+ ruleConditions: rule.conditions || [],
228
+ },
229
+ };
230
+ const filters = await this.dynamicFilterService.buildFiltersFromCriteria(ruleWithCriteria.filterCriteria, enhancedContext, assistantIds);
231
+ if (rule.statusRestrictions) {
232
+ filters.status = { in: rule.statusRestrictions };
233
+ }
234
+ return filters;
235
+ }
236
+ buildLegacyFilters(rule, context) {
237
+ const filters = {};
238
+ const { user, resource } = context;
239
+ const config = (0, resource_configurations_1.getResourceConfig)(resource);
240
+ const createdByField = config.columnMappings.createdBy;
241
+ const assignedToField = config.columnMappings.assignedTo;
242
+ const observersField = config.columnMappings.observers;
243
+ const groupIdField = config.columnMappings.groupId;
244
+ switch (rule.scope) {
245
+ case common_2.PermissionScope.OWN:
246
+ filters[createdByField] = user.id;
247
+ break;
248
+ case common_2.PermissionScope.ASSIGNED:
249
+ filters.or = [
250
+ { [createdByField]: user.id },
251
+ { [assignedToField]: user.id },
252
+ { [observersField]: { contains: [user.id] } },
253
+ ];
254
+ break;
255
+ case common_2.PermissionScope.TEAM:
256
+ const teamMemberIds = context.additionalContext?.teamMemberIds || [];
257
+ if (teamMemberIds.length > 0) {
258
+ filters.or = [
259
+ { [createdByField]: { in: teamMemberIds } },
260
+ { [assignedToField]: { in: teamMemberIds } },
261
+ { [observersField]: { contains: teamMemberIds } },
262
+ ];
263
+ }
264
+ break;
265
+ case common_2.PermissionScope.GROUP:
266
+ const groupIds = (user.groups || []).map((g) => g.id);
267
+ if (groupIds.length > 0) {
268
+ filters[groupIdField] = { in: groupIds };
269
+ }
270
+ break;
271
+ case common_2.PermissionScope.SUPERVISED:
272
+ const supervisedUserIds = this.getSupervisedUserIds(user);
273
+ if (supervisedUserIds.length > 0) {
274
+ filters.or = [
275
+ { [createdByField]: user.id },
276
+ { [createdByField]: { in: supervisedUserIds } },
277
+ ];
278
+ }
279
+ break;
280
+ case common_2.PermissionScope.ALL:
281
+ break;
282
+ }
283
+ return filters;
284
+ }
285
+ getSupervisedUserIds(user) {
286
+ const supervisedIds = [];
287
+ if (user.subGroups) {
288
+ user.subGroups.forEach((sg) => {
289
+ if (sg.assistants) {
290
+ supervisedIds.push(...sg.assistants.map((a) => a.id));
291
+ }
292
+ });
293
+ }
294
+ return supervisedIds;
295
+ }
296
+ sortRulesByPermissiveness(rules) {
297
+ const scopeOrder = {
298
+ [common_2.PermissionScope.ALL]: 0,
299
+ [common_2.PermissionScope.GROUP]: 1,
300
+ [common_2.PermissionScope.SUPERVISED]: 2,
301
+ [common_2.PermissionScope.TEAM]: 3,
302
+ [common_2.PermissionScope.ASSIGNED]: 4,
303
+ [common_2.PermissionScope.OWN]: 5,
304
+ };
305
+ return rules.sort((a, b) => scopeOrder[a.scope] - scopeOrder[b.scope]);
306
+ }
307
+ combineResults(results) {
308
+ const allowedResults = results.filter((r) => r.allowed);
309
+ if (allowedResults.length === 0) {
310
+ return { allowed: false, reason: "No rules passed" };
311
+ }
312
+ return allowedResults[0];
313
+ }
314
+ async checkIsSubGroupSupervisor(userId, subGroupRepository) {
315
+ try {
316
+ const supervisedCount = await subGroupRepository
317
+ .createQueryBuilder("sg")
318
+ .where("sg.supervisor = :userId", { userId })
319
+ .getCount();
320
+ return supervisedCount > 0;
321
+ }
322
+ catch (error) {
323
+ this.logger.error(`Error checking subgroup supervisor status: ${error}`);
324
+ return false;
325
+ }
326
+ }
327
+ async checkIsSubGroupMember(userId, subGroupRepository) {
328
+ try {
329
+ const memberCount = await subGroupRepository
330
+ .createQueryBuilder("sg")
331
+ .innerJoin("sg.assistants", "assistant")
332
+ .where("assistant.id = :userId", { userId })
333
+ .getCount();
334
+ return memberCount > 0;
335
+ }
336
+ catch (error) {
337
+ this.logger.error(`Error checking subgroup member status: ${error}`);
338
+ return false;
339
+ }
340
+ }
341
+ };
342
+ exports.PermissionEvaluatorService = PermissionEvaluatorService;
343
+ exports.PermissionEvaluatorService = PermissionEvaluatorService = PermissionEvaluatorService_1 = __decorate([
344
+ (0, common_1.Injectable)(),
345
+ __param(0, (0, typeorm_1.InjectRepository)(entities_1.Permission)),
346
+ __metadata("design:paramtypes", [typeorm_2.Repository,
347
+ dynamic_filter_service_1.DynamicFilterService])
348
+ ], PermissionEvaluatorService);
349
+ //# sourceMappingURL=permission-evaluator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-evaluator.service.js","sourceRoot":"","sources":["../../../../src/modules/authorization/services/permission-evaluator.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { SelectQueryBuilder } from "typeorm";
2
+ import { IResourceAccessFilter } from "../interfaces/authorization.interface";
3
+ import { PermissionContextType } from "../../../common/";
4
+ export declare class ResourceAccessFilterService implements IResourceAccessFilter {
5
+ applyFilters(queryBuilder: SelectQueryBuilder<any>, context: PermissionContextType): SelectQueryBuilder<any>;
6
+ private applyConditionsToQueryBuilder;
7
+ buildWhereConditions(context: PermissionContextType): Record<string, any>;
8
+ private applyCondition;
9
+ private applyOrConditions;
10
+ private applyAndConditions;
11
+ private applyObjectCondition;
12
+ private buildObjectConditionString;
13
+ buildAccessConditions(user: any, additionalFilters?: Record<string, any>): Record<string, any>;
14
+ private getSupervisedUserIds;
15
+ private isTaskRelationField;
16
+ private applyTaskRelationCondition;
17
+ private buildTaskRelationCondition;
18
+ private getTaskRelationTableName;
19
+ private extractUserId;
20
+ }