From a795b8af571432466928963933257b839da5ea8e Mon Sep 17 00:00:00 2001 From: Shubham Date: Wed, 19 Jun 2024 20:24:32 +0530 Subject: [PATCH] Issue PS-1024 fix: Updated auth.user API to get Role aand provilege Details --- src/adapters/postgres/potsgres-module.ts | 8 +++- src/adapters/postgres/user-adapter.ts | 54 ++++++++++++++++++------ 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/adapters/postgres/potsgres-module.ts b/src/adapters/postgres/potsgres-module.ts index 352f2be4..6af29513 100644 --- a/src/adapters/postgres/potsgres-module.ts +++ b/src/adapters/postgres/potsgres-module.ts @@ -16,6 +16,8 @@ import { UserTenantMapping } from "src/userTenantMapping/entities/user-tenant-ma import { Tenants } from "src/userTenantMapping/entities/tenant.entity"; import { UserRoleMapping } from "src/rbac/assign-role/entities/assign-role.entity"; import { Role } from "src/rbac/role/entities/role.entity"; +import { PostgresRoleService } from "./rbac/role-adapter"; +import { RolePrivilegeMapping } from "src/rbac/assign-privilege/entities/assign-privilege.entity"; @Module({ @@ -31,13 +33,15 @@ import { Role } from "src/rbac/role/entities/role.entity"; UserTenantMapping, Tenants, UserRoleMapping, - Role + Role, + RolePrivilegeMapping ]) ], providers: [ PostgresUserService, PostgresAttendanceService, - PostgresFieldsService + PostgresFieldsService, + PostgresRoleService, ], exports: [ PostgresUserService, diff --git a/src/adapters/postgres/user-adapter.ts b/src/adapters/postgres/user-adapter.ts index 85ebc607..3e119876 100644 --- a/src/adapters/postgres/user-adapter.ts +++ b/src/adapters/postgres/user-adapter.ts @@ -29,6 +29,8 @@ import { Response } from 'express'; import { APIID } from 'src/common/utils/api-id.config'; import { IServicelocator } from '../userservicelocator'; import { PostgresFieldsService } from "./fields-adapter" +import { PostgresRoleService } from './rbac/role-adapter'; +// import {PostgresS} @Injectable() export class PostgresUserService implements IServicelocator { @@ -55,6 +57,7 @@ export class PostgresUserService implements IServicelocator { @InjectRepository(Role) private roleRepository: Repository, private fieldsService: PostgresFieldsService, + private readonly postgresRoleService: PostgresRoleService ) { } async searchUser(tenantId: string, @@ -193,9 +196,9 @@ export class PostgresUserService implements IServicelocator { where: { roleId: getRole.roleId, }, - select: ["title"] + select: ["title",'code'] }) - return role + return role; } async findUserDetails(userId, username?: any) { @@ -211,22 +214,49 @@ export class PostgresUserService implements IServicelocator { if (!userDetails) { return false; } - const tenentDetails = await this.allUsersTenent(userDetails.userId) + const tenentDetails = await this.userTenantRoleData(userDetails.userId) userDetails['tenantData'] = tenentDetails; return userDetails; } - async allUsersTenent(userId: string) { - const query = ` - SELECT T.name AS tenantName, T."tenantId", UTM."Id" AS userTenantMappingId - FROM public."UserTenantMapping" UTM - LEFT JOIN public."Tenants" T - ON T."tenantId" = UTM."tenantId" - WHERE UTM."userId" = $1`; + + async userTenantRoleData(userId: string) { + const query = `SELECT T.name AS tenantName, T."tenantId", UTM."Id" AS userTenantMappingId + FROM public."UserTenantMapping" UTM + LEFT JOIN public."Tenants" T + ON T."tenantId" = UTM."tenantId" + WHERE UTM."userId" = $1;`; + const result = await this.usersRepository.query(query, [userId]); - return result; - } + + const combinedResult = []; + let roleArray = [] + for (let data of result) { + const roleData = await this.postgresRoleService.findUserRoleData(userId, data.tenantId); + if (roleData.length > 0) { + roleArray.push(roleData[0].roleid) + const roleId = roleData[0].roleid; + const roleName = roleData[0].title; + + const privilegeData = await this.postgresRoleService.findPrivilegeByRoleId(roleArray); + const privileges = privilegeData.map(priv => priv.name); + + combinedResult.push({ + tenantName: data.tenantname, + tenantId: data.tenantId, + userTenantMappingId: data.usertenantmappingid, + roleId: roleId, + roleName: roleName, + privileges: privileges + }); + } + } + + return combinedResult; +} + + async updateUser(userDto, response: Response) { const apiId = APIID.USER_UPDATE; try {