rez_core 1.1.0 → 2.0.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.
Files changed (84) hide show
  1. package/dist/module/auth/strategies/jwt.strategy.d.ts +1 -0
  2. package/dist/module/auth/strategies/jwt.strategy.js +2 -2
  3. package/dist/module/auth/strategies/jwt.strategy.js.map +1 -1
  4. package/dist/module/enterprise/entity/enterprise.entity.d.ts +1 -1
  5. package/dist/module/enterprise/entity/enterprise.entity.js +2 -2
  6. package/dist/module/enterprise/entity/enterprise.entity.js.map +1 -1
  7. package/dist/module/enterprise/entity/organization.entity.d.ts +1 -1
  8. package/dist/module/enterprise/entity/organization.entity.js +2 -2
  9. package/dist/module/enterprise/entity/organization.entity.js.map +1 -1
  10. package/dist/module/filter/entity/saved-filter-master.entity.d.ts +0 -1
  11. package/dist/module/filter/entity/saved-filter-master.entity.js +0 -4
  12. package/dist/module/filter/entity/saved-filter-master.entity.js.map +1 -1
  13. package/dist/module/meta/entity/entity-table-column.entity.d.ts +0 -1
  14. package/dist/module/meta/entity/entity-table-column.entity.js +0 -4
  15. package/dist/module/meta/entity/entity-table-column.entity.js.map +1 -1
  16. package/dist/module/meta/entity/entity-table.entity.d.ts +0 -1
  17. package/dist/module/meta/entity/entity-table.entity.js +0 -4
  18. package/dist/module/meta/entity/entity-table.entity.js.map +1 -1
  19. package/dist/module/module/controller/menu.controller.js +2 -1
  20. package/dist/module/module/controller/menu.controller.js.map +1 -1
  21. package/dist/module/module/controller/module-access.controller.js +2 -1
  22. package/dist/module/module/controller/module-access.controller.js.map +1 -1
  23. package/dist/module/module/entity/menu.entity.d.ts +1 -0
  24. package/dist/module/module/entity/menu.entity.js +4 -0
  25. package/dist/module/module/entity/menu.entity.js.map +1 -1
  26. package/dist/module/module/entity/module-access.entity.d.ts +1 -1
  27. package/dist/module/module/entity/module-access.entity.js +1 -1
  28. package/dist/module/module/entity/module-access.entity.js.map +1 -1
  29. package/dist/module/module/entity/module.entity.d.ts +1 -0
  30. package/dist/module/module/entity/module.entity.js +4 -0
  31. package/dist/module/module/entity/module.entity.js.map +1 -1
  32. package/dist/module/module/repository/menu.repository.d.ts +3 -3
  33. package/dist/module/module/repository/menu.repository.js +12 -8
  34. package/dist/module/module/repository/menu.repository.js.map +1 -1
  35. package/dist/module/module/repository/module-access.repository.js +1 -1
  36. package/dist/module/module/repository/module-access.repository.js.map +1 -1
  37. package/dist/module/module/service/menu.service.d.ts +1 -1
  38. package/dist/module/module/service/menu.service.js +4 -4
  39. package/dist/module/module/service/menu.service.js.map +1 -1
  40. package/dist/module/user/controller/login.controller.js +3 -3
  41. package/dist/module/user/controller/login.controller.js.map +1 -1
  42. package/dist/module/user/entity/role.entity.d.ts +0 -1
  43. package/dist/module/user/entity/role.entity.js +0 -4
  44. package/dist/module/user/entity/role.entity.js.map +1 -1
  45. package/dist/module/user/entity/user-role-mapping.entity.d.ts +1 -0
  46. package/dist/module/user/entity/user-role-mapping.entity.js +4 -0
  47. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  48. package/dist/module/user/repository/user.repository.d.ts +2 -2
  49. package/dist/module/user/repository/user.repository.js +8 -2
  50. package/dist/module/user/repository/user.repository.js.map +1 -1
  51. package/dist/module/user/service/login.service.d.ts +1 -1
  52. package/dist/module/user/service/login.service.js +2 -2
  53. package/dist/module/user/service/login.service.js.map +1 -1
  54. package/dist/module/user/service/role.service.js +2 -2
  55. package/dist/module/user/service/role.service.js.map +1 -1
  56. package/dist/module/user/service/user-session.service.js +1 -1
  57. package/dist/module/user/service/user-session.service.js.map +1 -1
  58. package/dist/module/user/service/user.service.d.ts +2 -2
  59. package/dist/module/user/service/user.service.js +4 -4
  60. package/dist/module/user/service/user.service.js.map +1 -1
  61. package/dist/tsconfig.build.tsbuildinfo +1 -1
  62. package/package.json +1 -1
  63. package/src/module/auth/strategies/jwt.strategy.ts +2 -2
  64. package/src/module/enterprise/entity/enterprise.entity.ts +2 -2
  65. package/src/module/enterprise/entity/organization.entity.ts +2 -2
  66. package/src/module/filter/entity/saved-filter-master.entity.ts +0 -3
  67. package/src/module/meta/entity/entity-table-column.entity.ts +1 -2
  68. package/src/module/meta/entity/entity-table.entity.ts +0 -2
  69. package/src/module/module/controller/menu.controller.ts +2 -1
  70. package/src/module/module/controller/module-access.controller.ts +2 -2
  71. package/src/module/module/entity/menu.entity.ts +3 -0
  72. package/src/module/module/entity/module-access.entity.ts +1 -1
  73. package/src/module/module/entity/module.entity.ts +3 -0
  74. package/src/module/module/repository/menu.repository.ts +48 -43
  75. package/src/module/module/repository/module-access.repository.ts +1 -1
  76. package/src/module/module/service/menu.service.ts +4 -4
  77. package/src/module/user/controller/login.controller.ts +4 -4
  78. package/src/module/user/entity/role.entity.ts +0 -3
  79. package/src/module/user/entity/user-role-mapping.entity.ts +3 -0
  80. package/src/module/user/repository/user.repository.ts +13 -6
  81. package/src/module/user/service/login.service.ts +2 -2
  82. package/src/module/user/service/role.service.ts +2 -2
  83. package/src/module/user/service/user-session.service.ts +1 -1
  84. package/src/module/user/service/user.service.ts +4 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rez_core",
3
- "version": "1.1.0",
3
+ "version": "2.0.1",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "private": false,
@@ -22,7 +22,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
22
22
  }
23
23
 
24
24
  async validate(payload) {
25
- const { userId, sessionToken } = payload;
25
+ const { userId, sessionToken,appcode } = payload;
26
26
 
27
27
  // Check if session exists and is valid
28
28
  const userSession = await this.userSessionRepository.findOne({
@@ -37,6 +37,6 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
37
37
  throw new UnauthorizedException('Invalid or expired session');
38
38
  }
39
39
 
40
- return { userId, sessionToken };
40
+ return { userId, sessionToken ,appcode};
41
41
  }
42
42
  }
@@ -29,8 +29,8 @@ export class EnterpriseData {
29
29
  @Column({ name: 'modified_date', type: 'datetime', nullable: true })
30
30
  modified_date: Date;
31
31
 
32
- @Column({ name: 'app_code', type: 'varchar', nullable: true, length: 50 })
33
- app_code: string;
32
+ @Column({ name: 'appcode', type: 'varchar', nullable: true, length: 50 })
33
+ appcode: string;
34
34
 
35
35
  @Column({ name: 'app_url_name', type: 'varchar', nullable: true, length: 50 })
36
36
  app_url_name: string;
@@ -11,8 +11,8 @@ export class OrganizationData {
11
11
  @Column({ name: 'code', nullable: true })
12
12
  code: string;
13
13
 
14
- @Column({ name: 'app_code', nullable: true })
15
- appCode: string;
14
+ @Column({ name: 'appcode', nullable: true })
15
+ appcode: string;
16
16
 
17
17
  @Column({ name: 'name', nullable: true })
18
18
  name: string;
@@ -9,9 +9,6 @@ export class SavedFilterMaster extends BaseEntity {
9
9
  this.entity_type = ENTITYTYPE_SAVEDFILTERMASTER;
10
10
  }
11
11
 
12
- @Column({ length: 50, type: 'varchar', nullable: true })
13
- app_code: string;
14
-
15
12
  @Column({ length: 50, type: 'varchar', nullable: true })
16
13
  mapped_entity_type: string;
17
14
 
@@ -9,8 +9,7 @@ export class EntityTableColumn extends BaseEntity {
9
9
  this.entity_type = ENTITYTYPE_ENTITYTABLECOLUMN;
10
10
  }
11
11
 
12
- @Column({ name: 'app_code', nullable: true })
13
- app_code: string;
12
+
14
13
 
15
14
  @Column({ name: 'mapped_entity_type', nullable: true })
16
15
  mapped_entity_type: string;
@@ -9,8 +9,6 @@ export class EntityTable extends BaseEntity {
9
9
  this.entity_type = ENTITYTYPE_ENTITYTABLE;
10
10
  }
11
11
 
12
- @Column({ name: 'app_code', nullable: true })
13
- app_code: string;
14
12
 
15
13
  @Column({ name: 'mapped_entity_type', nullable: true })
16
14
  mapped_entity_type: string;
@@ -10,6 +10,7 @@ export class MenuController {
10
10
  @Get()
11
11
  async getMenu(@Request() req) {
12
12
  const userId = req.user.userId;
13
- return this.menuService.getUserMenu(userId);
13
+ const appcode = req.user.appcode;
14
+ return this.menuService.getUserMenu(userId,appcode);
14
15
  }
15
16
  }
@@ -45,8 +45,8 @@ export class ModuleAccessController {
45
45
  @Get('ui-config')
46
46
  async getModuleUIConfig(@Query('module_code') moduleCode: string, @Request() req) {
47
47
  const userId = req.user.userId;
48
-
49
- const roles = await this.menuRepository.getUserRoles(userId); // returns ['1', '4']
48
+ const appcode = req.user.appcode;
49
+ const roles = await this.menuRepository.getUserRoles(userId,appcode); // returns ['1', '4']
50
50
 
51
51
  if (!roles || roles.length === 0) {
52
52
  throw new BadRequestException('User has no roles');
@@ -34,4 +34,7 @@ export class MenuData {
34
34
 
35
35
  @Column({ type: 'int', nullable: true })
36
36
  ui_visible: number;
37
+
38
+ @Column({ type: 'varchar', nullable: true })
39
+ appcode: string;
37
40
  }
@@ -18,5 +18,5 @@ export class ModuleAccess {
18
18
  action_type: string;
19
19
 
20
20
  @Column({type: 'varchar', length: 100, nullable: true})
21
- app_code: string;
21
+ appcode: string;
22
22
  }
@@ -40,4 +40,7 @@ export class ModuleData {
40
40
 
41
41
  @Column({ type: 'json', nullable: true })
42
42
  ui_config: JSON;
43
+
44
+ @Column({ type: 'varchar', length: 100, nullable: true })
45
+ appcode: string;
43
46
  }
@@ -14,59 +14,64 @@ export class MenuRepository extends Repository<MenuData> {
14
14
  /**
15
15
  * Get all role IDs assigned to a user.
16
16
  */
17
- async getUserRoles(userId: number): Promise<number[]> {
17
+ async getUserRoles(userId: number, appcode: string): Promise<number[]> {
18
18
  const roles = await this.dataSource
19
19
  .getRepository(UserRoleMapping)
20
- .createQueryBuilder('userRoleMapping')
21
- .select('userRoleMapping.role_id')
22
- .where('userRoleMapping.user_id = :userId', { userId })
23
- .getMany();
24
-
25
- return roles.map((role) => role.role_id);
20
+ .createQueryBuilder('urm')
21
+ .innerJoin('cr_role', 'role', 'role.id = urm.role_id') // manual join
22
+ .select('urm.role_id')
23
+ .where('urm.user_id = :userId', { userId })
24
+ .andWhere('role.appcode = :appcode', { appcode })
25
+ .getRawMany();
26
+
27
+ return roles. map((r) => r.urm_role_id);
26
28
  }
29
+
27
30
 
28
31
  /**
29
32
  * Get module codes that the user has access to based on their role IDs.
30
- */
31
- async getAccessibleModules(roleIds: number[]): Promise<string[]> {
32
- // Get role codes from role IDs
33
- const roleCodes = await this.dataSource
34
- .getRepository(Role)
35
- .createQueryBuilder('role')
36
- .select('role.code')
37
- .where('role.id IN (:...roleIds)', { roleIds })
38
- .getMany();
33
+ */async getAccessibleModules(roleIds: number[], appCode: string): Promise<string[]> {
34
+ // Get role codes from role IDs
35
+ const roleCodes = await this.dataSource
36
+ .getRepository(Role)
37
+ .createQueryBuilder('role')
38
+ .select('role.code')
39
+ .where('role.id IN (:...roleIds)', { roleIds })
40
+ .getMany();
39
41
 
40
- const codes = roleCodes.map((role) => role.code);
42
+ const codes = roleCodes.map((role) => role.code);
41
43
 
42
- if (codes.length === 0) {
43
- return [];
44
- }
44
+ if (codes.length === 0) {
45
+ return [];
46
+ }
45
47
 
46
- // Get accessible modules using role codes
47
- const modules = await this.dataSource
48
- .getRepository(ModuleAccess)
49
- .createQueryBuilder('moduleAccess')
50
- .select('moduleAccess.module_code')
51
- .where('moduleAccess.role_code IN (:...codes)', { codes })
52
- .andWhere('moduleAccess.access_flag > 0')
53
- .getMany();
48
+ // Get accessible modules using role codes and appCode
49
+ const modules = await this.dataSource
50
+ .getRepository(ModuleAccess)
51
+ .createQueryBuilder('moduleAccess')
52
+ .select('moduleAccess.module_code')
53
+ .where('moduleAccess.role_code IN (:...codes)', { codes })
54
+ .andWhere('moduleAccess.access_flag > 0')
55
+ .andWhere('LOWER(moduleAccess.appcode) = LOWER(:appCode)', { appCode }) // case-insensitive
56
+ .getMany();
54
57
 
55
- return modules.map((module) => module.module_code);
56
- }
58
+ return modules.map((module) => module.module_code);
59
+ }
57
60
 
58
- async getMenuItems(moduleCodes: string[]): Promise<MenuData[]> {
59
- const menuItems = await this.createQueryBuilder('menu')
60
- .leftJoin('cr_module', 'module', 'menu.module_code = module.module_code')
61
- .where('menu.module_code IN (:...moduleCodes)', { moduleCodes })
62
- .select([
63
- 'menu.*',
64
- 'module.component_name AS component',
65
- 'module.title AS title',
66
- 'module.entity_type AS entity_type',
67
- ])
68
- .getRawMany();
61
+ async getMenuItems(moduleCodes: string[], appcode: string): Promise<MenuData[]> {
62
+ const menuItems = await this.createQueryBuilder('menu')
63
+ .leftJoin('cr_module', 'module', 'menu.module_code = module.module_code')
64
+ .where('menu.module_code IN (:...moduleCodes)', { moduleCodes })
65
+ .andWhere('LOWER(module.appcode) = LOWER(:appcode)', { appcode }) // appcode filter
66
+ .select([
67
+ 'menu.*',
68
+ 'module.component_name AS component',
69
+ 'module.title AS title',
70
+ 'module.entity_type AS entity_type',
71
+ ])
72
+ .getRawMany();
73
+
74
+ return menuItems;
75
+ }
69
76
 
70
- return menuItems;
71
- }
72
77
  }
@@ -122,7 +122,7 @@ export class ModuleAccessRepository {
122
122
  role_code: access.role_code,
123
123
  module_code: access.module_code,
124
124
  action_type: access.action_type,
125
- app_code: access.app_code,
125
+ appcode: access.app_code,
126
126
  },
127
127
  });
128
128
 
@@ -9,22 +9,22 @@ export class MenuService {
9
9
  /**
10
10
  * Fetch and construct menu hierarchy for a given user.
11
11
  */
12
- async getUserMenu(userId: number) {
12
+ async getUserMenu(userId: number,appcode:string): Promise<{ menu: any[] }> {
13
13
  // Step 1: Get the roles of the user
14
- const roleCodes = await this.menuRepository.getUserRoles(userId);
14
+ const roleCodes = await this.menuRepository.getUserRoles(userId,appcode);
15
15
  if (!roleCodes.length) {
16
16
  return { menu: [] }; // Return empty menu if user has no roles
17
17
  }
18
18
 
19
19
  // Step 2: Get the modules the user has access to
20
20
  const moduleCodes =
21
- await this.menuRepository.getAccessibleModules(roleCodes);
21
+ await this.menuRepository.getAccessibleModules(roleCodes,appcode);
22
22
  if (!moduleCodes.length) {
23
23
  return { menu: [] }; // Return empty menu if no accessible modules
24
24
  }
25
25
 
26
26
  // Step 3: Get the menu items based on accessible modules
27
- const menuItems = await this.menuRepository.getMenuItems(moduleCodes);
27
+ const menuItems = await this.menuRepository.getMenuItems(moduleCodes,appcode);
28
28
 
29
29
  // Step 4: Build hierarchical menu structure
30
30
  const menuTree = this.buildMenuHierarchy(menuItems);
@@ -20,11 +20,11 @@ export class LoginController {
20
20
  @Post('login')
21
21
 
22
22
  async login(@Body() body, @Res() res: Response) {
23
- return res
24
- .status(HttpStatus.OK)
25
- .json(await this.loginService.login(body.email_id, body.password));
26
-
23
+ const { email_id, password, appcode,organization_id} = body;
24
+ const result = await this.loginService.login(email_id, password, appcode,organization_id);
25
+ return res.status(HttpStatus.OK).json(result);
27
26
  }
27
+
28
28
 
29
29
  @UseGuards(JwtAuthGuard)
30
30
  @Post('logout')
@@ -10,9 +10,6 @@ export class Role extends BaseEntity {
10
10
  this.entity_type = ENTITYTYPE_ROLE;
11
11
  }
12
12
 
13
- @Column({ length: 50, type: 'varchar', nullable: true })
14
- app_code: string;
15
-
16
13
  @Column({ type: 'int', nullable: true })
17
14
  is_system: number;
18
15
 
@@ -23,4 +23,7 @@ export class UserRoleMapping {
23
23
 
24
24
  @Column({ type: 'int', nullable: true })
25
25
  is_default: number;
26
+
27
+ @Column({type: 'varchar'})
28
+ appcode: string;
26
29
  }
@@ -13,34 +13,41 @@ export class UserRepository {
13
13
  async findById(userId: number): Promise<UserData | null> {
14
14
  return this.userRepository.findOne({ where: { id: userId } });
15
15
  }
16
-
17
16
  async findByEmailId(
18
17
  email: string,
19
18
  organization_id?: number,
19
+ appCode?: string,
20
20
  ): Promise<UserData | null> {
21
21
  if (!email) return null;
22
-
22
+
23
23
  const where: any = { email_id: email };
24
24
  if (organization_id !== undefined) {
25
25
  where.organization_id = organization_id;
26
26
  }
27
-
27
+ if (appCode !== undefined) {
28
+ where.appcode = appCode;
29
+ }
28
30
  return this.userRepository.findOne({ where });
29
31
  }
30
-
32
+
31
33
  async findByMobile(
32
34
  mobile: string,
33
35
  organization_id?: number,
36
+ appCode?: string,
34
37
  ): Promise<UserData | null> {
35
38
  if (!mobile) return null;
36
-
39
+
37
40
  const where: any = { mobile };
38
41
  if (organization_id !== undefined) {
39
42
  where.organization_id = organization_id;
40
43
  }
41
-
44
+ if (appCode !== undefined) {
45
+ where.appcode = appCode;
46
+ }
47
+
42
48
  return this.userRepository.findOne({ where });
43
49
  }
50
+
44
51
 
45
52
  async saveUser(user: UserData): Promise<UserData> {
46
53
  return this.userRepository.save(user);
@@ -16,8 +16,8 @@ export class LoginService {
16
16
  masterKey: string = this.configService.get('MASTER_KEY') || '';
17
17
  masterIv: string = this.configService.get('MASTER_IV') || '';
18
18
 
19
- async login(email: string, password: string) {
20
- const user = await this.userService.findByEmailId(email);
19
+ async login(email: string, password: string,appcode:string,organization_id) {
20
+ const user = await this.userService.findByEmailId(email,organization_id,appcode);
21
21
  if (!user) {
22
22
  return {
23
23
  success: false,
@@ -51,7 +51,7 @@ export class RoleService extends EntityServiceImpl {
51
51
  module_code: perm.module_code,
52
52
  action_type: perm.action_type,
53
53
  access_flag: perm.access_flag,
54
- app_code: perm.app_code,
54
+ appcode: perm.appcode,
55
55
  }),
56
56
  );
57
57
 
@@ -128,7 +128,7 @@ export class RoleService extends EntityServiceImpl {
128
128
  module_code: perm.module_code,
129
129
  action_type: perm.action_type,
130
130
  access_flag: perm.access_flag,
131
- app_code: perm.app_code,
131
+ appcode: perm.appcode,
132
132
  }),
133
133
  );
134
134
 
@@ -28,7 +28,7 @@ export class UserSessionService {
28
28
 
29
29
  await this.userSessionRepository.saveSession(userSession);
30
30
 
31
- const payload = { userId: user.id, sessionToken };
31
+ const payload = { userId: user.id, sessionToken, appcode: user.appcode };
32
32
  const accessToken = this.jwtAuthService.generateJwt(payload);
33
33
 
34
34
  userSession.access_token = accessToken;
@@ -165,11 +165,11 @@ export class UserService extends EntityServiceImpl {
165
165
  return savedData;
166
166
  }
167
167
 
168
- async findByEmailId(email_id: string): Promise<UserData | null> {
169
- return await this.userRepository.findByEmailId(email_id);
168
+ async findByEmailId(email_id: string,organization_id?: number,appCode?:string): Promise<UserData | null> {
169
+ return await this.userRepository.findByEmailId(email_id,organization_id,appCode);
170
170
  }
171
171
 
172
- async findByMobile(mobile: string): Promise<UserData | null> {
173
- return await this.userRepository.findByMobile(mobile);
172
+ async findByMobile(mobile: string,organization_id?: number,appCode?:string): Promise<UserData | null> {
173
+ return await this.userRepository.findByMobile(mobile,organization_id,appCode);
174
174
  }
175
175
  }