From a057088a93024f2299882afdc7be6b6a8e82c38d Mon Sep 17 00:00:00 2001 From: ilham Date: Thu, 9 Dec 2021 21:30:10 +0700 Subject: [PATCH] add: role in jwt --- src/auth/auth.service.ts | 6 ++- src/users/users.service.ts | 88 ++++++++++++++++++++++---------------- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 5e6ab4b..e0212c1 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { UsersService } from '../users/users.service'; import { hashPassword } from '../helper/hash_password'; import { JwtService } from '@nestjs/jwt'; +import { User } from '../users/entities/user.entity'; @Injectable() export class AuthService { @@ -22,10 +23,11 @@ export class AuthService { return null; } - async login(user: any) { + async login(user: User) { const payload = { username: user.username, - sub: user.userId, + sub: user.id, + role: user.roles.name, }; return { diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 6cf326e..f122b90 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -1,4 +1,10 @@ -import { forwardRef, HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; +import { + forwardRef, + HttpException, + HttpStatus, + Inject, + Injectable, +} from '@nestjs/common'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; import { Connection, EntityNotFoundError, Repository } from 'typeorm'; @@ -10,14 +16,18 @@ import { CoaService } from 'src/transaction/coa.service'; import { balanceType, coaType } from 'src/helper/enum-list'; import { RoleService } from 'src/configurable/roles.service'; import { InputCoaDto } from 'src/transaction/dto/input-coa.dto'; -import * as uuid from "uuid"; +import * as uuid from 'uuid'; @Injectable() export class UsersService { constructor( @InjectRepository(User) private usersRepository: Repository, - @Inject(forwardRef(() => CoaService)) + @Inject( + forwardRef(() => { + return CoaService; + }), + ) private coaService: CoaService, private roleService: RoleService, private connection: Connection, @@ -27,51 +37,54 @@ export class UsersService { const roles = await this.roleService.findOne(createUserDto.roleId); const superior = await this.findByUsername(currentUser.username); const salt = randomStringGenerator(); - - let userData = new User(); + + const userData = new User(); + userData.id = uuid.v4(); - userData.username = createUserDto.username, - userData.password = await hashPassword(createUserDto.password, salt), - userData.salt = salt, - userData.superior = superior, - userData.roles = roles + (userData.username = createUserDto.username), + (userData.password = await hashPassword(createUserDto.password, salt)), + (userData.salt = salt), + (userData.superior = superior), + (userData.roles = roles); await this.connection.transaction(async (manager) => { - const result = await manager.insert(User,userData); - - let dataCoaWallet = new InputCoaDto(); + const result = await manager.insert(User, userData); + + const dataCoaWallet = new InputCoaDto(); + dataCoaWallet.user = userData; dataCoaWallet.balanceType = balanceType.CREDIT; dataCoaWallet.type = coaType.WALLET; dataCoaWallet.coaEntityManager = manager; - - if(createUserDto.superior){ - let dataCoaAP = new InputCoaDto(); + + if (createUserDto.superior) { + const dataCoaAP = new InputCoaDto(); + dataCoaAP.user = userData; dataCoaAP.balanceType = balanceType.CREDIT; dataCoaAP.relatedUserId = superior.id; dataCoaAP.type = coaType.ACCOUNT_PAYABLE; dataCoaAP.coaEntityManager = manager; - - let dataCoaAR = new InputCoaDto(); + + const dataCoaAR = new InputCoaDto(); + dataCoaAR.user = userData; dataCoaAR.balanceType = balanceType.DEBIT; dataCoaAR.relatedUserId = superior.id; dataCoaAR.type = coaType.ACCOUNT_RECEIVABLE; dataCoaAR.coaEntityManager = manager; - + await this.coaService.create(dataCoaAP); await this.coaService.create(dataCoaAR); } - - await this.coaService.create(dataCoaWallet); - }) + await this.coaService.create(dataCoaWallet); + }); return userData; } - findAll(page:number) { + findAll(page: number) { return this.usersRepository.findAndCount({ skip: page * 10, take: 10, @@ -81,12 +94,12 @@ export class UsersService { }); } - findByRoles(relationId:string,page:number) { + findByRoles(relationId: string, page: number) { return this.usersRepository.findAndCount({ skip: page * 10, take: 10, - where:{ - roles:relationId + where: { + roles: relationId, }, order: { updatedAt: 'DESC', @@ -96,7 +109,7 @@ export class UsersService { async findExist(id: string) { try { - return await this.usersRepository.findOneOrFail(id); + return await this.usersRepository.findOneOrFail(id); } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( @@ -114,9 +127,9 @@ export class UsersService { async findByUsername(username: string) { try { - return await this.usersRepository.findOneOrFail({ - username:username - }); + return await this.usersRepository.findOneOrFail({ + username: username, + }); } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( @@ -133,17 +146,19 @@ export class UsersService { } async findOne(id: string) { - const coa = await this.coaService.findByUser(id,coaType.WALLET); + const coa = await this.coaService.findByUser(id, coaType.WALLET); + try { - const userData = await this.usersRepository.findOneOrFail({ - where: { - id: id + const userData = await this.usersRepository.findOneOrFail({ + where: { + id: id, }, - relations:["roles","superior"] + relations: ['roles', 'superior'], }); + return { ...userData, - wallet:coa.amount, + wallet: coa.amount, }; } catch (e) { if (e instanceof EntityNotFoundError) { @@ -207,6 +222,7 @@ export class UsersService { where: { username, }, + relations: ['roles'], }); } }