feat: implement role-based login validation to restrict user/agent portal access

This commit is contained in:
pradeepkumar
2026-04-13 20:26:14 +05:30
parent 7be1b03383
commit 02a1f15324
2 changed files with 24 additions and 1 deletions

View File

@@ -168,6 +168,20 @@ export class AuthService {
throw new UnauthorizedException('Invalid email or password'); throw new UnauthorizedException('Invalid email or password');
} }
// Role-based login validation (only when loginRole is provided from web/mobile tabs)
if (dto.loginRole) {
if (dto.loginRole === 'USER' && user.role === UserRole.AGENT) {
throw new UnauthorizedException(
'This email is registered as an Agent. Please use the Agent tab to sign in.',
);
}
if (dto.loginRole === 'AGENT' && user.role === UserRole.USER) {
throw new UnauthorizedException(
'This email is registered as a User. Please use the User tab to sign in.',
);
}
}
// Check if 2FA is enabled // Check if 2FA is enabled
if (user.twoFactorEnabled) { if (user.twoFactorEnabled) {
// Generate temporary token for 2FA verification // Generate temporary token for 2FA verification

View File

@@ -1,4 +1,4 @@
import { IsEmail, IsString, MinLength } from 'class-validator'; import { IsEmail, IsOptional, IsString, MinLength } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger'; import { ApiProperty } from '@nestjs/swagger';
export class LoginDto { export class LoginDto {
@@ -16,4 +16,13 @@ export class LoginDto {
@IsString() @IsString()
@MinLength(1, { message: 'Password is required' }) @MinLength(1, { message: 'Password is required' })
password: string; password: string;
@ApiProperty({
required: false,
enum: ['USER', 'AGENT'],
description: 'Which login tab the user selected (User or Agent)',
})
@IsOptional()
@IsString()
loginRole?: string;
} }