@tomei/sso 0.47.0 → 0.48.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (22) hide show
  1. package/dist/src/components/user-group/user-group.d.ts +5 -0
  2. package/dist/src/components/user-group/user-group.js +73 -0
  3. package/dist/src/components/user-group/user-group.js.map +1 -1
  4. package/dist/src/components/user-privilege/user-privilege.d.ts +42 -0
  5. package/dist/src/components/user-privilege/user-privilege.js +338 -0
  6. package/dist/src/components/user-privilege/user-privilege.js.map +1 -1
  7. package/dist/src/components/user-privilege/user-privilege.repository.d.ts +1 -0
  8. package/dist/src/components/user-privilege/user-privilege.repository.js +25 -0
  9. package/dist/src/components/user-privilege/user-privilege.repository.js.map +1 -1
  10. package/dist/src/components/user-system-access/user-system-access.d.ts +12 -0
  11. package/dist/src/components/user-system-access/user-system-access.js +148 -0
  12. package/dist/src/components/user-system-access/user-system-access.js.map +1 -1
  13. package/dist/src/components/user-system-access/user-system-access.repository.d.ts +1 -0
  14. package/dist/src/components/user-system-access/user-system-access.repository.js +25 -0
  15. package/dist/src/components/user-system-access/user-system-access.repository.js.map +1 -1
  16. package/dist/tsconfig.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/src/components/user-group/user-group.ts +134 -0
  19. package/src/components/user-privilege/user-privilege.repository.ts +14 -0
  20. package/src/components/user-privilege/user-privilege.ts +588 -0
  21. package/src/components/user-system-access/user-system-access.repository.ts +14 -0
  22. package/src/components/user-system-access/user-system-access.ts +298 -0
@@ -6,6 +6,8 @@ import { System } from '../system/system';
6
6
  import { ApplicationConfig } from '@tomei/config';
7
7
  import SystemModel from '../../models/system.entity';
8
8
  import UserModel from '../../models/user.entity';
9
+ import { ActionEnum, Activity } from '@tomei/activity-history';
10
+ import { Op } from 'sequelize';
9
11
 
10
12
  export class UserSystemAccess extends ObjectBase {
11
13
  ObjectType = 'UserSystemAccess';
@@ -85,6 +87,7 @@ export class UserSystemAccess extends ObjectBase {
85
87
  whereOption: {
86
88
  //An object containing filter criteria, specifically:
87
89
  UserId: number; //The ID of the user whose system access records are to be retrieved.
90
+ SystemCode?: string;
88
91
  },
89
92
  pagination: {
90
93
  //An object containing pagination parameters:
@@ -159,6 +162,7 @@ export class UserSystemAccess extends ObjectBase {
159
162
  return {
160
163
  records: userSystemAccesses.rows.map((userSystemAccess) => {
161
164
  return {
165
+ UserSystemAccessId: userSystemAccess.UserSystemAccessId,
162
166
  SystemName: userSystemAccess.System.Name,
163
167
  SystemCode: userSystemAccess.System.SystemCode,
164
168
  Status: userSystemAccess.Status,
@@ -178,4 +182,298 @@ export class UserSystemAccess extends ObjectBase {
178
182
  throw error;
179
183
  }
180
184
  }
185
+
186
+ public static async createAccess(
187
+ loginUser: User, //The currently logged-in user initiating the request.
188
+ dbTransaction: any, //The active database transaction to ensure consistency during the query.
189
+ UserId: string, //The user ID for whom system access is being created.
190
+ SystemCode: string, //The system code for which access is being granted.
191
+ Status: string, //The status of access ('Active' or 'Inactive').
192
+ ) {
193
+ try {
194
+ // Part 1: Privilege Checking:
195
+ // Call loginUser.checkPrivileges() method by passing:
196
+ // SystemCode: Retrieve from app config.
197
+ // PrivilegeCode: 'USER_SYSTEM_ACCESS_CREATE'.
198
+ const systemCode =
199
+ ApplicationConfig.getComponentConfigValue('system-code');
200
+ const privilegeCode = 'USER_SYSTEM_ACCESS_CREATE';
201
+ const isPrivileged = await loginUser.checkPrivileges(
202
+ systemCode,
203
+ privilegeCode,
204
+ );
205
+ if (!isPrivileged) {
206
+ throw new ClassError(
207
+ 'UserSystemAccess',
208
+ 'UserSystemAccessErrMsg01',
209
+ 'You do not have permission to access this resource.',
210
+ );
211
+ }
212
+ // Part 2: Validation for Existing Access
213
+ // Use the UserSystemAccess.findAll() method to check if the user already has access to the specified system:
214
+ // Pass the following parameters:
215
+ // loginUser
216
+ // dbTransaction
217
+ // whereOption: set to UserId = UserId and SystemCode = SystemCode.
218
+ // If a record is found, throw an error indicating that access for this user and system already exists.
219
+
220
+ const isExist = await UserSystemAccess._Repository.findAll({
221
+ where: { [Op.and]: [{ UserId: UserId }, { SystemCode: SystemCode }] },
222
+ transaction: dbTransaction,
223
+ });
224
+
225
+ if (isExist?.length > 0) {
226
+ throw new ClassError(
227
+ 'UserSystemAccess',
228
+ 'UserSystemAccessErrMsg01',
229
+ 'User already have access to this system',
230
+ );
231
+ }
232
+
233
+ // Part 3: Insert System Access Record
234
+ // After successful validation, create a new instance of UserSystemAccess with the following fields:
235
+ // - UserId: set to the UserId parameter.
236
+ // - SystemCode: set to the SystemCode parameter.
237
+ // - Status: set to the Status parameter.
238
+ // - CreatedById: set to loginUser.UserId.
239
+ // - CreatedAt: set to the current timestamp.
240
+ // - UpdatedById: set to loginUser.UserId.
241
+ // - UpdatedAt: set to the current timestamp (same as CreatedAt).
242
+ // Save the new UserSystemAccess instance in the database within the dbTransaction.
243
+
244
+ const newUserSystemAccess = new UserSystemAccess();
245
+ newUserSystemAccess.UserId = parseInt(UserId);
246
+ newUserSystemAccess.SystemCode = SystemCode;
247
+ newUserSystemAccess.Status = Status;
248
+ newUserSystemAccess._CreatedById = loginUser.UserId;
249
+ newUserSystemAccess._CreatedAt = new Date();
250
+ newUserSystemAccess._UpdatedById = loginUser.UserId;
251
+ newUserSystemAccess._UpdatedAt = new Date();
252
+
253
+ const payload = {
254
+ UserId: newUserSystemAccess.UserId,
255
+ SystemCode: newUserSystemAccess.SystemCode,
256
+ Status: newUserSystemAccess.Status,
257
+ CreatedById: newUserSystemAccess.CreatedById,
258
+ CreatedAt: newUserSystemAccess.CreatedAt,
259
+ UpdatedById: newUserSystemAccess.UpdatedById,
260
+ UpdatedAt: newUserSystemAccess.UpdatedAt,
261
+ };
262
+
263
+ const systemAccess = await UserSystemAccess._Repository.create(payload, {
264
+ transaction: dbTransaction,
265
+ });
266
+
267
+ // Part 4: Record Activity History
268
+ // Initialize an empty object ({}) as EntityValueBefore.
269
+ // Set EntityValueAfter to the stringified version of the newly created UserSystemAccess instance.
270
+ // Create a new activity log entry:
271
+ // ActivityId: auto-generated by calling activity.createId().
272
+ // Action: set to ActionEnum.Create.
273
+ // Description: set to "Create User System Access".
274
+ // EntityType: set to UserSystemAccess.
275
+ // EntityId: set to the newly created UserSystemAccess.UserSystemAccessId.
276
+ // EntityValueBefore: set to {} (empty).
277
+ // EntityValueAfter: set to the stringified version of the new access record.
278
+ // Call the activity.create() method, passing:
279
+ // dbTransaction
280
+ // userId: set to loginUser.UserId.
281
+
282
+ const entityValueBefore = {};
283
+
284
+ //Instantiate new activity
285
+ const activity = new Activity();
286
+ activity.ActivityId = activity.createId();
287
+ activity.Action = ActionEnum.CREATE;
288
+ activity.Description = 'Create User System Access';
289
+ activity.EntityType = 'UserSystemAccess';
290
+ activity.EntityId = systemAccess.UserSystemAccessId?.toString();
291
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
292
+ activity.EntityValueAfter = JSON.stringify(payload);
293
+
294
+ //Call Activity.create method
295
+ await activity.create(loginUser.ObjectId, dbTransaction);
296
+
297
+ // Part 5: Return Newly Created Record
298
+ // Return the newly created UserSystemAccess instance with all relevant fields, including UserSystemAccessId, SystemCode, Status, CreatedAt, and CreatedById.
299
+ newUserSystemAccess.UserSystemAccessId = systemAccess.UserSystemAccessId;
300
+ return newUserSystemAccess;
301
+ } catch (error) {
302
+ throw error;
303
+ }
304
+ }
305
+
306
+ public async update(
307
+ loginUser: User, //The user object representing the currently logged-in user.
308
+ dbTransaction: any, //The database transaction instance for managing the transaction scope.
309
+ Status: string, //The new access status (Active/Inactive) for the user system access.
310
+ ) {
311
+ try {
312
+ // Part 1: Update Access
313
+ // Call the UserSystemAccess._Repo.update() method to perform the update operation, passing:
314
+ // - Status: The new access status.
315
+ // - UpdatedById: loginUser.UserId (to indicate who updated the record).
316
+ // - UpdatedAt: Set to the current date and time.
317
+ // - dbTransaction: The database transaction instance.
318
+
319
+ const entityValueBefore = {
320
+ UserId: this.UserId,
321
+ SystemCode: this.SystemCode,
322
+ Status: this.Status,
323
+ CreatedById: this.CreatedById,
324
+ CreatedAt: this.CreatedAt,
325
+ UpdatedById: this.UpdatedById,
326
+ UpdatedAt: this.UpdatedAt,
327
+ };
328
+ await UserSystemAccess._Repository.update(
329
+ {
330
+ Status: Status,
331
+ UpdatedById: loginUser.UserId,
332
+ UpdatedAt: new Date(),
333
+ },
334
+ {
335
+ where: {
336
+ UserSystemAccessId: this.UserSystemAccessId,
337
+ },
338
+ transaction: dbTransaction,
339
+ },
340
+ );
341
+
342
+ const entityValueAfter = {
343
+ UserId: this.UserId,
344
+ SystemCode: this.SystemCode,
345
+ Status: Status,
346
+ CreatedById: this.CreatedById,
347
+ CreatedAt: this.CreatedAt,
348
+ UpdatedById: loginUser.UserId,
349
+ UpdatedAt: new Date(),
350
+ };
351
+
352
+ // Part 2: Record Activity History
353
+ // Initialize a variable entityValueBefore to store the current state of the user system access record before the update.
354
+ // Create an instance of the Activity class and set the following properties:
355
+ // - ActivityId: Call activity.createId().
356
+ // - Action: Set to ActionEnum.Update.
357
+ // - Description: Set to Update User System Access.
358
+ // - EntityType: Set to UserSystemAccess.
359
+ // - EntityId: Use the ID of the updated user system access record.
360
+ // - EntityValueBefore: Stringify entityValueBefore to capture the state before the update.
361
+ // - EntityValueAfter: Stringify the updated user system access record to capture the new state after the update.
362
+ // Call the activity create method with the following parameters:
363
+ // - dbTransaction
364
+ // - userId: loginUser.UserId
365
+ const activity = new Activity();
366
+ activity.ActivityId = activity.createId();
367
+ activity.Action = ActionEnum.UPDATE;
368
+ activity.Description = 'Update User System Access';
369
+ activity.EntityType = 'UserSystemAccess';
370
+ activity.EntityId = this.UserSystemAccessId + '';
371
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
372
+ activity.EntityValueAfter = JSON.stringify(entityValueAfter);
373
+ await activity.create(loginUser.ObjectId, dbTransaction);
374
+
375
+ // Part 3: Return Updated Record
376
+ // Retrieve the updated user system access record from the database or return the updated instance as needed.
377
+
378
+ // Part 5: Return Newly Created Record
379
+ // Return the newly created UserSystemAccess instance with all relevant fields, including UserSystemAccessId, SystemCode, Status, CreatedAt, and CreatedById.
380
+ return entityValueAfter;
381
+ } catch (error) {
382
+ throw error;
383
+ }
384
+ }
385
+
386
+ public static async remove(
387
+ loginUser: User, //The currently logged-in user initiating the request.
388
+ dbTransaction: any, //The active database transaction to ensure consistency during the query.
389
+ UserSystemAccessId: number, //The unique identifier of the User System Access record to be deleted.
390
+ ) {
391
+ try {
392
+ // Part 1: Privilege Checking
393
+ // Call loginUser.checkPrivileges() method by passing:
394
+ // - SystemCode: Retrieve from app config.
395
+ // - PrivilegeCode: 'USER_SYSTEM_ACCESS_REMOVE'.
396
+ // If the user does not have the required privileges, throw an appropriate exception.
397
+ const systemCode =
398
+ ApplicationConfig.getComponentConfigValue('system-code');
399
+ const privilegeCode = 'USER_SYSTEM_ACCESS_REMOVE';
400
+ const isPrivileged = await loginUser.checkPrivileges(
401
+ systemCode,
402
+ privilegeCode,
403
+ );
404
+ if (!isPrivileged) {
405
+ throw new ClassError(
406
+ 'UserSystemAccess',
407
+ 'UserSystemAccessErrMsg01',
408
+ 'You do not have permission to access this resource.',
409
+ );
410
+ }
411
+
412
+ // Part 2: Retrieve Record
413
+ // Use the UserSystemAccessRepo.findById(UserSystemAccessId) method to retrieve the record.
414
+ // If the record does not exist, throw an exception indicating the record was not found.
415
+
416
+ const userSystemAccess = await UserSystemAccess._Repository.findOne({
417
+ where: {
418
+ UserSystemAccessId: UserSystemAccessId,
419
+ },
420
+ transaction: dbTransaction,
421
+ });
422
+
423
+ if (!userSystemAccess) {
424
+ throw new ClassError(
425
+ 'UserSystemAccess',
426
+ 'UserSystemAccessErrMsg02',
427
+ 'User System Access not Found',
428
+ );
429
+ }
430
+
431
+ // Part 3: Delete Record
432
+ // Call the UserSystemAccess._Repo.delete() method, passing:
433
+ // - UserSystemAccessId
434
+ // dbTransaction to permanently delete the record from the database.
435
+ await UserSystemAccess._Repository.delete(
436
+ UserSystemAccessId,
437
+ dbTransaction,
438
+ );
439
+
440
+ const entityValueBefore = {
441
+ UserId: userSystemAccess.UserId,
442
+ SystemCode: userSystemAccess.SystemCode,
443
+ Status: userSystemAccess.Status,
444
+ CreatedById: userSystemAccess.CreatedById,
445
+ CreatedAt: userSystemAccess.CreatedAt,
446
+ UpdatedById: userSystemAccess.UpdatedById,
447
+ UpdatedAt: userSystemAccess.UpdatedAt,
448
+ };
449
+
450
+ // Part 4: Record Activity History
451
+ // Instantiate a new activity from the Activity class, and set:
452
+ // - ActivityId: activity.createId()
453
+ // - Action: ActionEnum.Delete
454
+ // - Description: Delete User System Access
455
+ // - EntityType: UserSystemAccess
456
+ // - EntityId: UserSystemAccessId
457
+ // - EntityValueBefore: Stringified representation of the record before deletion.
458
+ // - EntityValueAfter: null.
459
+ // Call the activity.create() method by passing:
460
+ // - dbTransaction
461
+ // - userId: loginUser.UserId.
462
+
463
+ //Instantiate new activity
464
+ const activity = new Activity();
465
+ activity.ActivityId = activity.createId();
466
+ activity.Action = ActionEnum.DELETE;
467
+ activity.Description = 'Delete User System Access';
468
+ activity.EntityType = 'UserSystemAccess';
469
+ activity.EntityId = UserSystemAccessId?.toString();
470
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
471
+ activity.EntityValueAfter = JSON.stringify({});
472
+
473
+ //Call Activity.create method
474
+ await activity.create(loginUser.ObjectId, dbTransaction);
475
+ } catch (error) {
476
+ throw error;
477
+ }
478
+ }
181
479
  }