refactor: change the role to roles and many to many

This commit is contained in:
mahyargdz
2025-02-16 16:58:51 +03:30
parent 9cdd7ef28e
commit ad673613d9
32 changed files with 264 additions and 88 deletions
+26 -8
View File
@@ -4,8 +4,10 @@ import { DataSource } from "typeorm";
import { TokensService } from "./tokens.service";
import { AuthMessage, UserMessage } from "../../../common/enums/message.enum";
import { NotificationsService } from "../../notifications/providers/notifications.service";
import { User } from "../../users/entities/user.entity";
import { RoleEnum } from "../../users/enums/role.enum";
import { UsersService } from "../../users/providers/users.service";
import { checkUserRole } from "../../utils/providers/checkRole.utils";
import { OTPService } from "../../utils/providers/otp.service";
import { PasswordService } from "../../utils/providers/password.service";
import { SmsService } from "../../utils/providers/sms.service";
@@ -68,7 +70,7 @@ export class AuthService {
const hashedPassword = await this.passwordService.hashPassword(completeRegistrationDto.password);
const user = await this.usersService.createUser(completeRegistrationDto, hashedPassword, queryRunner);
const tokens = this.tokensService.generateAccessAndRefreshToken({ sub: user.id, role: user.role.name });
const tokens = this.generateAccessAndRefreshToken(user);
await queryRunner.commitTransaction();
@@ -90,7 +92,7 @@ export class AuthService {
const user = await this.checkUserLoginCredentialWithEmail(email, password);
const tokens = this.tokensService.generateAccessAndRefreshToken({ sub: user.id, role: user.role.name });
const tokens = this.generateAccessAndRefreshToken(user);
await this.notificationService.createLoginNotification(user.id);
@@ -107,8 +109,10 @@ export class AuthService {
const user = await this.checkUserLoginCredentialWithEmail(email, password);
if (user.role.name !== RoleEnum.ADMIN) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const tokens = this.tokensService.generateAccessAndRefreshToken({ sub: user.id, role: user.role.name });
const hasAccess = checkUserRole(user.roles, RoleEnum.ADMIN);
if (!hasAccess) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const tokens = this.generateAccessAndRefreshToken(user);
return {
message: AuthMessage.PASSWORD_LOGIN_SUCCESS,
@@ -134,7 +138,9 @@ export class AuthService {
if (!user) throw new BadRequestException(AuthMessage.PHONE_NOT_FOUND);
//check the if the method call is from admin or not
if (isAdmin && user.role.name !== RoleEnum.ADMIN) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const hasAccess = checkUserRole(user.roles, RoleEnum.ADMIN);
if (isAdmin && !hasAccess) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const existCode = await this.otpService.checkExistOtp(phone, "LOGIN");
if (existCode) {
@@ -163,7 +169,7 @@ export class AuthService {
const user = await this.checkUserLoginCredentialWithPhone(phone, code);
const tokens = this.tokensService.generateAccessAndRefreshToken({ sub: user.id, role: user.role.name });
const tokens = this.generateAccessAndRefreshToken(user);
await this.notificationService.createLoginNotification(user.id);
return {
@@ -180,9 +186,12 @@ export class AuthService {
const user = await this.checkUserLoginCredentialWithPhone(phone, code);
if (user.role.name !== RoleEnum.ADMIN) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const hasAccess = checkUserRole(user.roles, RoleEnum.ADMIN);
if (!hasAccess) throw new BadRequestException(AuthMessage.NOT_ADMIN);
const tokens = this.generateAccessAndRefreshToken(user);
const tokens = this.tokensService.generateAccessAndRefreshToken({ sub: user.id, role: user.role.name });
return {
message: AuthMessage.LOGIN_SUCCESS,
...tokens,
@@ -231,4 +240,13 @@ export class AuthService {
return user;
}
//****************** */
//****************** */
private generateAccessAndRefreshToken(user: User) {
return this.tokensService.generateAccessAndRefreshToken({
id: user.id,
roles: user.roles.map((r) => r.name),
permissions: user.roles.flatMap((r) => (r?.permissions?.length ? r.permissions.map((p) => p.name) : [])),
});
}
}