@tomei/sso 0.52.1 → 0.52.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tomei/sso",
3
- "version": "0.52.1",
3
+ "version": "0.52.3",
4
4
  "description": "Tomei SSO Package",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -1192,11 +1192,6 @@ export class Group extends TreeNodeBase<Group> {
1192
1192
  //Retrieve Roles based on privilege on a system
1193
1193
  let systemWhere: any = {};
1194
1194
 
1195
- if (search) {
1196
- if (search.GroupCode.length) {
1197
- }
1198
- }
1199
-
1200
1195
  if (SystemCode) {
1201
1196
  systemWhere = {
1202
1197
  SystemCode: {
@@ -9,6 +9,22 @@ export class UserSystemAccessRepository
9
9
  super(UserSystemAccessModel);
10
10
  }
11
11
 
12
+ async findAndCountAll(options?: any) {
13
+ try {
14
+ let UserSystemAccess: any;
15
+ if (options) {
16
+ UserSystemAccess = await UserSystemAccessModel.findAndCountAll(options);
17
+ } else {
18
+ UserSystemAccess = await UserSystemAccessModel.findAndCountAll();
19
+ }
20
+ return UserSystemAccess;
21
+ } catch (error) {
22
+ throw new Error(
23
+ `An Error occured when retriving UserSystemAccess: ${error.message}`,
24
+ );
25
+ }
26
+ }
27
+
12
28
  async delete(UserSystemAccessId: number, dbTransaction?: any) {
13
29
  try {
14
30
  const options = {
@@ -2,9 +2,12 @@ import { ClassError, ObjectBase } from '@tomei/general';
2
2
  import { UserSystemAccessRepository } from './user-system-access.repository';
3
3
  import { IUserSystemAccess } from '../../interfaces/user-system-access.interface';
4
4
  import { User } from '../login-user/user';
5
- import { System } from '../system/system';
6
5
  import { ApplicationConfig } from '@tomei/config';
7
6
  import SystemModel from '../../models/system.entity';
7
+ import SystemPrivilegeModel from '../../models/system-privilege.entity';
8
+ import UserSystemAccessModel from '../../models/user-system-access.entity';
9
+ import GroupModel from '../../models/group.entity';
10
+ import GroupSystemAccessModel from '../../models/group-system-access.entity';
8
11
  import UserModel from '../../models/user.entity';
9
12
  import { ActionEnum, Activity } from '@tomei/activity-history';
10
13
  import { Op } from 'sequelize';
@@ -182,6 +185,232 @@ export class UserSystemAccess extends ObjectBase {
182
185
  }
183
186
  }
184
187
 
188
+ public static async findAllUsers(
189
+ loginUser: User, //The currently logged-in user initiating the request.
190
+ dbTransaction: any, //The active database transaction to ensure consistency during the query.
191
+ SystemCode: string,
192
+ Page: number,
193
+ Rows: number,
194
+ Search: {
195
+ UserId?: string | number;
196
+ Status?: string;
197
+ },
198
+ ) {
199
+ // Part 1: Privilege Checking
200
+ const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
201
+ const isPrivileged = await loginUser.checkPrivileges(
202
+ systemCode,
203
+ 'USER_SYSTEM_ACCESS_LIST',
204
+ );
205
+
206
+ if (!isPrivileged) {
207
+ throw new ClassError(
208
+ 'UserSystemAccessUser',
209
+ 'UserSystemAccessUserErrMsg01',
210
+ 'You do not have permission to view system access users.',
211
+ );
212
+ }
213
+
214
+ try {
215
+ // Part 2: Retrieve System Access Users and returns
216
+ const queryObj: any = { SystemCode: SystemCode };
217
+
218
+ if (Search) {
219
+ Object.entries(Search).forEach(([key, value]) => {
220
+ queryObj[key] = value;
221
+ });
222
+ }
223
+
224
+ let options: any = {
225
+ where: queryObj,
226
+ distinct: true,
227
+ transaction: dbTransaction,
228
+ };
229
+
230
+ if (Page && Rows) {
231
+ options = {
232
+ ...options,
233
+ limit: Rows,
234
+ offset: Rows * (Page - 1),
235
+ order: [['CreatedAt', 'DESC']],
236
+ include: [
237
+ {
238
+ model: SystemModel,
239
+ attributes: ['Name', 'SystemCode'],
240
+ },
241
+ {
242
+ model: UserModel,
243
+ as: 'User',
244
+ attributes: ['UserId', 'FullName'],
245
+ },
246
+ ],
247
+ };
248
+ }
249
+
250
+ const userSystemAccesses =
251
+ await this._Repository.findAndCountAll(options);
252
+ return userSystemAccesses;
253
+ } catch (error) {
254
+ throw error;
255
+ }
256
+ }
257
+
258
+ public static async findAllUserPrivileges(
259
+ loginUser: User, //The currently logged-in user initiating the request.
260
+ dbTransaction: any, //The active database transaction to ensure consistency during the query.
261
+ SystemCode: string,
262
+ search?: {
263
+ UserId?: string[];
264
+ Status?: string;
265
+ },
266
+ ) {
267
+ // Part 1: Privilege Checking
268
+ const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
269
+ const isPrivileged = await loginUser.checkPrivileges(
270
+ systemCode,
271
+ 'USER_SYSTEM_ACCESS_LIST',
272
+ );
273
+
274
+ if (!isPrivileged) {
275
+ throw new ClassError(
276
+ 'UserSystemAccessUser',
277
+ 'UserSystemAccessUserErrMsg01',
278
+ 'You do not have permission to view system access users.',
279
+ );
280
+ }
281
+
282
+ try {
283
+ //Part 2: Retrieve User System Access Based on Privileges
284
+ let systemWhere: any = {};
285
+
286
+ if (SystemCode) {
287
+ systemWhere = {
288
+ SystemCode: {
289
+ [Op.substring]: SystemCode,
290
+ },
291
+ };
292
+ }
293
+
294
+ const allSystemAccessUsers = await UserSystemAccessModel.findAll({
295
+ include: [
296
+ {
297
+ model: SystemModel,
298
+ where: systemWhere,
299
+ },
300
+ {
301
+ model: UserModel,
302
+ as: 'User',
303
+ attributes: ['UserId', 'FullName'],
304
+ },
305
+ ],
306
+ transaction: dbTransaction,
307
+ });
308
+
309
+ const allPrivileges = await SystemPrivilegeModel.findAll({
310
+ where: systemWhere,
311
+ transaction: dbTransaction,
312
+ });
313
+
314
+ const systemAccessUserPrivileges = allPrivileges.map((privilege) => {
315
+ const filteredUsers = allSystemAccessUsers
316
+ .map((userAccess) => userAccess.User)
317
+ .filter((user) => search.UserId.includes(String(user.UserId)));
318
+
319
+ return {
320
+ ...privilege.get({ plain: true }),
321
+ Users: filteredUsers,
322
+ };
323
+ });
324
+
325
+ return systemAccessUserPrivileges;
326
+ } catch (error) {
327
+ throw error;
328
+ }
329
+ }
330
+
331
+ public static async findAllUserRoles(
332
+ loginUser: User, //The currently logged-in user initiating the request.
333
+ dbTransaction: any, //The active database transaction to ensure consistency during the query.
334
+ SystemCode: string,
335
+ search?: {
336
+ UserId?: string[];
337
+ Status?: string;
338
+ },
339
+ ) {
340
+ // Part 1: Privilege Checking
341
+ const systemCode = ApplicationConfig.getComponentConfigValue('system-code');
342
+ const isPrivileged = await loginUser.checkPrivileges(
343
+ systemCode,
344
+ 'USER_SYSTEM_ACCESS_LIST',
345
+ );
346
+
347
+ if (!isPrivileged) {
348
+ throw new ClassError(
349
+ 'UserSystemAccessUser',
350
+ 'UserSystemAccessUserErrMsg01',
351
+ 'You do not have permission to view system access users.',
352
+ );
353
+ }
354
+
355
+ try {
356
+ //Part 2: Retrieve User System Access Based on Privileges
357
+ let systemWhere: any = {};
358
+
359
+ if (SystemCode) {
360
+ systemWhere = {
361
+ SystemCode: {
362
+ [Op.substring]: SystemCode,
363
+ },
364
+ };
365
+ }
366
+
367
+ const allGroupSystemAccess = await GroupSystemAccessModel.findAll({
368
+ where: systemWhere,
369
+ include: [
370
+ {
371
+ model: GroupModel,
372
+ where: {
373
+ Type: 'Role',
374
+ },
375
+ },
376
+ ],
377
+ transaction: dbTransaction,
378
+ });
379
+
380
+ const allSystemAccessUsers = await UserSystemAccessModel.findAll({
381
+ include: [
382
+ {
383
+ model: SystemModel,
384
+ where: systemWhere,
385
+ },
386
+ {
387
+ model: UserModel,
388
+ as: 'User',
389
+ attributes: ['UserId', 'FullName'],
390
+ },
391
+ ],
392
+ transaction: dbTransaction,
393
+ });
394
+
395
+ const systemAccessUserRoles = allGroupSystemAccess.map(
396
+ (groupSystemAccess) => {
397
+ const filteredUsers = allSystemAccessUsers
398
+ .map((userAccess) => userAccess.User)
399
+ .filter((user) => search.UserId.includes(String(user.UserId)));
400
+
401
+ return {
402
+ ...groupSystemAccess.Group.get({ plain: true }),
403
+ Users: filteredUsers,
404
+ };
405
+ },
406
+ );
407
+
408
+ return systemAccessUserRoles;
409
+ } catch (error) {
410
+ throw error;
411
+ }
412
+ }
413
+
185
414
  public static async createAccess(
186
415
  loginUser: User, //The currently logged-in user initiating the request.
187
416
  dbTransaction: any, //The active database transaction to ensure consistency during the query.