rez_core 6.5.33 → 6.5.35
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/dist/module/dashboard/service/dashboard.service.js +1 -1
- package/dist/module/dashboard/service/dashboard.service.js.map +1 -1
- package/dist/module/module/controller/menu.controller.js +2 -2
- package/dist/module/module/controller/menu.controller.js.map +1 -1
- package/dist/module/module/controller/module-access.controller.js +3 -3
- package/dist/module/module/controller/module-access.controller.js.map +1 -1
- package/dist/module/module/repository/menu.repository.d.ts +3 -3
- package/dist/module/module/repository/menu.repository.js +30 -10
- package/dist/module/module/repository/menu.repository.js.map +1 -1
- package/dist/module/module/repository/module-access.repository.d.ts +1 -1
- package/dist/module/module/repository/module-access.repository.js +11 -3
- package/dist/module/module/repository/module-access.repository.js.map +1 -1
- package/dist/module/module/service/menu.service.d.ts +1 -1
- package/dist/module/module/service/menu.service.js +4 -4
- package/dist/module/module/service/menu.service.js.map +1 -1
- package/dist/module/module/service/module-access.service.d.ts +2 -2
- package/dist/module/module/service/module-access.service.js +3 -3
- package/dist/module/module/service/module-access.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/module/dashboard/service/dashboard.service.ts +1 -1
- package/src/module/module/controller/menu.controller.ts +2 -2
- package/src/module/module/controller/module-access.controller.ts +3 -3
- package/src/module/module/repository/menu.repository.ts +35 -10
- package/src/module/module/repository/module-access.repository.ts +12 -3
- package/src/module/module/service/menu.service.ts +4 -4
- package/src/module/module/service/module-access.service.ts +4 -4
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@ export class DashboardService {
|
|
|
17
17
|
|
|
18
18
|
const access = await this.moduleAccessService.getUserPermissions({
|
|
19
19
|
userId: loggedInUser.id,
|
|
20
|
-
|
|
20
|
+
appcode: loggedInUser.appcode,
|
|
21
21
|
level_type: loggedInUser.level_type,
|
|
22
22
|
level_id: loggedInUser.level_id
|
|
23
23
|
});
|
|
@@ -9,7 +9,7 @@ export class MenuController {
|
|
|
9
9
|
@UseGuards(JwtAuthGuard)
|
|
10
10
|
@Get()
|
|
11
11
|
async getMenu(@Request() req) {
|
|
12
|
-
const { id: userId,
|
|
13
|
-
return this.menuService.getUserMenu(userId,
|
|
12
|
+
const { id: userId, appcode, level_type, level_id } = req.user.userData;
|
|
13
|
+
return this.menuService.getUserMenu(userId, appcode, level_type, level_id);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -120,17 +120,17 @@ export class ModuleAccessController {
|
|
|
120
120
|
const userData = req.user.userData;
|
|
121
121
|
|
|
122
122
|
const userId = userData?.id;
|
|
123
|
-
const
|
|
123
|
+
const appcode = userData?.appcode;
|
|
124
124
|
const level_type = userData?.level_type;
|
|
125
125
|
const level_id = userData?.level_id;
|
|
126
126
|
|
|
127
|
-
if (!userId || !
|
|
127
|
+
if (!userId || !appcode || !level_type || !level_id) {
|
|
128
128
|
throw new BadRequestException('Invalid token data');
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
return this.moduleAccessService.getUserPermissions({
|
|
132
132
|
userId,
|
|
133
|
-
|
|
133
|
+
appcode,
|
|
134
134
|
level_type,
|
|
135
135
|
level_id
|
|
136
136
|
});
|
|
@@ -34,15 +34,22 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
34
34
|
|
|
35
35
|
async getAccessibleModules(
|
|
36
36
|
roleIds: number[],
|
|
37
|
-
|
|
37
|
+
appcode: string,
|
|
38
38
|
): Promise<number[]> {
|
|
39
39
|
|
|
40
|
+
const appMasterRepo = this.reflectionHelper.getRepoService('AppMaster');
|
|
41
|
+
const appMaster = await appMasterRepo.findOne({
|
|
42
|
+
where: {
|
|
43
|
+
code: appcode
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
40
47
|
const modules = await this.moduleAccessRepo
|
|
41
48
|
.createQueryBuilder('moduleAccess')
|
|
42
49
|
.select('moduleAccess.module_id')
|
|
43
50
|
.where('moduleAccess.role_id IN (:...roleIds)', { roleIds })
|
|
44
51
|
.andWhere('moduleAccess.access_flag > 0')
|
|
45
|
-
.andWhere('moduleAccess.app_id = :app_id', { app_id:
|
|
52
|
+
.andWhere('moduleAccess.app_id = :app_id', { app_id: appMaster.id })
|
|
46
53
|
.getMany();
|
|
47
54
|
|
|
48
55
|
return Array.from(new Set(modules.map((module) => module.module_id)));
|
|
@@ -53,22 +60,30 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
53
60
|
*/
|
|
54
61
|
async getMenuItems(
|
|
55
62
|
modules: number[],
|
|
56
|
-
|
|
63
|
+
appcode: string,
|
|
57
64
|
levelType: string,
|
|
58
65
|
) {
|
|
66
|
+
const appMasterRepo = this.reflectionHelper.getRepoService('AppMaster');
|
|
67
|
+
|
|
68
|
+
const appMaster = await appMasterRepo.findOne({
|
|
69
|
+
where: {
|
|
70
|
+
code: appcode
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
|
|
59
74
|
return await this.menuData
|
|
60
75
|
.createQueryBuilder('menu')
|
|
61
76
|
.leftJoin(
|
|
62
77
|
'sso_module',
|
|
63
78
|
'module',
|
|
64
79
|
`
|
|
65
|
-
menu.
|
|
80
|
+
menu.module_id = module.id
|
|
66
81
|
AND menu.app_id = module.app_id
|
|
67
82
|
AND menu.level_type = module.level_type
|
|
68
83
|
`,
|
|
69
84
|
)
|
|
70
85
|
.where('menu.module_id IN (:...modules)', { modules: modules })
|
|
71
|
-
.andWhere('menu.app_id = :app_id', { app_id:
|
|
86
|
+
.andWhere('menu.app_id = :app_id', { app_id: appMaster.id })
|
|
72
87
|
.andWhere('menu.level_type = :levelType', { levelType })
|
|
73
88
|
.andWhere('menu.ui_visible = 1')
|
|
74
89
|
.select([
|
|
@@ -83,10 +98,18 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
83
98
|
|
|
84
99
|
async resolveUserRoles(
|
|
85
100
|
userId: number,
|
|
86
|
-
|
|
101
|
+
appcode: string,
|
|
87
102
|
levelType: string,
|
|
88
103
|
levelId: number,
|
|
89
104
|
): Promise<number[]> {
|
|
105
|
+
const appMasterRepo = this.reflectionHelper.getRepoService('AppMaster');
|
|
106
|
+
|
|
107
|
+
const appMaster = await appMasterRepo.findOne({
|
|
108
|
+
where: {
|
|
109
|
+
code: appcode
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
|
|
90
113
|
const repo = this.reflectionHelper.getRepoService('UserRoleMapping');
|
|
91
114
|
|
|
92
115
|
if (userId) {
|
|
@@ -102,7 +125,9 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
102
125
|
const getUserUrm = await repo.findOne({
|
|
103
126
|
where: {
|
|
104
127
|
user_id: userId,
|
|
105
|
-
|
|
128
|
+
app: {
|
|
129
|
+
code: appcode
|
|
130
|
+
},
|
|
106
131
|
},
|
|
107
132
|
});
|
|
108
133
|
|
|
@@ -123,7 +148,7 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
123
148
|
.where('urm.user_id = :userId', { userId: userId })
|
|
124
149
|
.andWhere('urm.level_type = :levelType', { levelType })
|
|
125
150
|
.andWhere('urm.level_id = :levelId', { levelId: levelId })
|
|
126
|
-
.andWhere('role.app_id = :app_id', { app_id:
|
|
151
|
+
.andWhere('role.app_id = :app_id', { app_id: appMaster.id })
|
|
127
152
|
.getRawMany();
|
|
128
153
|
|
|
129
154
|
if (roles.length) return roles.map((r) => r.urm_role_id);
|
|
@@ -148,7 +173,7 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
148
173
|
.where('urm.user_id = :userId', { userId })
|
|
149
174
|
.andWhere('urm.level_type = :levelType', { levelType: 'BRN' })
|
|
150
175
|
.andWhere('urm.level_id = :levelId', { levelId: brandId })
|
|
151
|
-
.andWhere('role.app_id = :app_id', { app_id:
|
|
176
|
+
.andWhere('role.app_id = :app_id', { app_id: appMaster.id })
|
|
152
177
|
.getRawMany();
|
|
153
178
|
|
|
154
179
|
if (roles.length) return roles.map((r) => r.urm_role_id);
|
|
@@ -162,7 +187,7 @@ export class MenuRepository extends Repository<MenuData> {
|
|
|
162
187
|
.where('urm.user_id = :userId', { userId })
|
|
163
188
|
.andWhere('urm.level_type = :levelType', { levelType: 'ORG' })
|
|
164
189
|
.andWhere('urm.level_id = :levelId', { levelId: orgId })
|
|
165
|
-
.andWhere('role.app_id = :app_id', { app_id:
|
|
190
|
+
.andWhere('role.app_id = :app_id', { app_id: appMaster.id })
|
|
166
191
|
.getRawMany();
|
|
167
192
|
|
|
168
193
|
if (roles.length) return roles.map((r) => r.urm_role_id);
|
|
@@ -342,12 +342,14 @@ export class ModuleAccessRepository {
|
|
|
342
342
|
};
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
async getModuleAccessByRoles(roleIds: number[],
|
|
345
|
+
async getModuleAccessByRoles(roleIds: number[], appcode: string) {
|
|
346
346
|
// Step 1: Get role codes from sso_role
|
|
347
347
|
const roles = await this.roleRepo.find({
|
|
348
348
|
where: {
|
|
349
349
|
id: In(roleIds),
|
|
350
|
-
|
|
350
|
+
app: {
|
|
351
|
+
code: appcode
|
|
352
|
+
},
|
|
351
353
|
},
|
|
352
354
|
select: ['id', 'code'],
|
|
353
355
|
});
|
|
@@ -355,6 +357,13 @@ export class ModuleAccessRepository {
|
|
|
355
357
|
const roleCodes = roles.map((r) => r.code);
|
|
356
358
|
if (!roleCodes.length) return [];
|
|
357
359
|
|
|
360
|
+
const appMasterRepo = this.reflectionHelper.getRepoService('AppMaster');
|
|
361
|
+
const appMaster =await appMasterRepo.findOne({
|
|
362
|
+
where: {
|
|
363
|
+
code: appcode
|
|
364
|
+
}
|
|
365
|
+
})
|
|
366
|
+
|
|
358
367
|
// Step 2: Fetch full access data
|
|
359
368
|
const accessRecords = await this.moduleAccessRepo
|
|
360
369
|
.createQueryBuilder('access')
|
|
@@ -366,7 +375,7 @@ export class ModuleAccessRepository {
|
|
|
366
375
|
'access.appcode AS appcode',
|
|
367
376
|
])
|
|
368
377
|
.where('access.role_code IN (:...roleCodes)', { roleCodes })
|
|
369
|
-
.andWhere('access.app_id = :app_id', { app_id })
|
|
378
|
+
.andWhere('access.app_id = :app_id', { app_id: appMaster.id })
|
|
370
379
|
.getRawMany();
|
|
371
380
|
|
|
372
381
|
// Step 3: Format output
|
|
@@ -14,14 +14,14 @@ export class MenuService {
|
|
|
14
14
|
*/
|
|
15
15
|
async getUserMenu(
|
|
16
16
|
userId: number,
|
|
17
|
-
|
|
17
|
+
appcode: string,
|
|
18
18
|
levelType: 'ORG' | 'SCH',
|
|
19
19
|
levelId: number,
|
|
20
20
|
): Promise<{ menu: any[] }> {
|
|
21
21
|
// Step 1: Resolve roles (with fallback logic inside)
|
|
22
22
|
const roleCodes = await this.menuRepository.resolveUserRoles(
|
|
23
23
|
userId,
|
|
24
|
-
|
|
24
|
+
appcode,
|
|
25
25
|
levelType,
|
|
26
26
|
levelId,
|
|
27
27
|
);
|
|
@@ -30,14 +30,14 @@ export class MenuService {
|
|
|
30
30
|
// Step 2: Get accessible modules
|
|
31
31
|
const modules = await this.menuRepository.getAccessibleModules(
|
|
32
32
|
roleCodes,
|
|
33
|
-
|
|
33
|
+
appcode,
|
|
34
34
|
);
|
|
35
35
|
if (!modules.length) return { menu: [] };
|
|
36
36
|
|
|
37
37
|
// Step 3: Get menu items for the given level type
|
|
38
38
|
const menuItems = await this.menuRepository.getMenuItems(
|
|
39
39
|
modules,
|
|
40
|
-
|
|
40
|
+
appcode,
|
|
41
41
|
levelType,
|
|
42
42
|
);
|
|
43
43
|
|
|
@@ -125,19 +125,19 @@ export class ModuleAccessService {
|
|
|
125
125
|
|
|
126
126
|
async getUserPermissions({
|
|
127
127
|
userId,
|
|
128
|
-
|
|
128
|
+
appcode,
|
|
129
129
|
level_type,
|
|
130
130
|
level_id,
|
|
131
131
|
}: {
|
|
132
132
|
userId: number;
|
|
133
|
-
|
|
133
|
+
appcode: string;
|
|
134
134
|
level_type: string;
|
|
135
135
|
level_id: number;
|
|
136
136
|
}) {
|
|
137
137
|
// Step 1: Resolve roles
|
|
138
138
|
const roleCodes = await this.menuRepository.resolveUserRoles(
|
|
139
139
|
userId,
|
|
140
|
-
|
|
140
|
+
appcode,
|
|
141
141
|
level_type,
|
|
142
142
|
level_id,
|
|
143
143
|
);
|
|
@@ -152,7 +152,7 @@ export class ModuleAccessService {
|
|
|
152
152
|
const allPermissions =
|
|
153
153
|
await this.moduleAccessRepository.getModuleAccessByRoles(
|
|
154
154
|
roleIds,
|
|
155
|
-
|
|
155
|
+
appcode,
|
|
156
156
|
);
|
|
157
157
|
|
|
158
158
|
// Step 3: If level_type is SCH, check school status using raw query
|