Loading backend/src/admin/admin.service.ts +6 −2 Original line number Diff line number Diff line import { Injectable } from '@nestjs/common'; import { Injectable, UnauthorizedException } from '@nestjs/common'; import { CreateAdminDto } from './dto/create-admin.dto'; import { Admin } from './entities/admin.entity'; import { Repository } from 'typeorm'; Loading @@ -12,6 +12,10 @@ export class AdminService { } async findOne(email: string): Promise<Admin> { try { return await this.adminRepository.findOneByOrFail({ email }); } catch (error) { throw new UnauthorizedException('Admin not found'); } } } backend/src/admin/dto/create-admin.dto.ts +2 −2 Original line number Diff line number Diff line import { ApiProperty } from '@nestjs/swagger'; import { ADMIN_ROLE } from 'src/enum/admin-role.enum'; import { UserStatus } from 'src/enum/user-status.enum'; import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; import { UserStatus } from 'src/shared/enum/user-status.enum'; export class CreateAdminDto { @ApiProperty() Loading backend/src/admin/entities/admin.entity.ts +2 −2 Original line number Diff line number Diff line import { ADMIN_ROLE } from 'src/enum/admin-role.enum'; import { UserStatus } from 'src/enum/user-status.enum'; import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; import { UserStatus } from 'src/shared/enum/user-status.enum'; import { Entity, Column, PrimaryColumn } from 'typeorm'; @Entity() Loading backend/src/app.module.ts +5 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ import { join } from 'path'; import { Town } from './town/entities/town.entity'; import { TownModule } from './town/town.module'; import { TownTraduction } from './town/entities/town-traduction.entity'; import { AuthModule } from './shared/service/auth.module'; import { APP_GUARD } from '@nestjs/core'; import { AuthGuard } from './auth/admin/auth.guard'; @Module({ imports: [ Loading @@ -38,12 +41,13 @@ import { TownTraduction } from './town/entities/town-traduction.entity'; StateModule, DatabaseSeederModule, TownModule, AuthModule, ServeStaticModule.forRoot({ rootPath: join(__dirname, '..', 'static'), }), ], controllers: [AppController], providers: [AppService, DatabaseSeederModule], providers: [AppService, DatabaseSeederModule, { provide: APP_GUARD, useClass: AuthGuard }], exports: [TypeOrmModule], }) export class AppModule {} backend/src/auth/admin/auth.guard.ts 0 → 100644 +23 −0 Original line number Diff line number Diff line import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { AuthService } from 'src/shared/service/auth.service'; import { Roles } from '../role.decorator'; @Injectable() export class AuthGuard implements CanActivate { constructor( private authService: AuthService, private reflector: Reflector, ) {} async canActivate(context: ExecutionContext): Promise<boolean> { const requiredRole = this.reflector.get(Roles, context.getHandler()); if (!requiredRole) return true; const request = context.switchToHttp().getRequest(); let { authorization }: any = request.headers; if (!authorization) throw new UnauthorizedException('session expired! Please sign In'); authorization = authorization.split(' ')[1]; const role = await this.authService.validateToken(authorization); if (!requiredRole.includes(role)) throw new UnauthorizedException('Unauthorized access'); return true; } } Loading
backend/src/admin/admin.service.ts +6 −2 Original line number Diff line number Diff line import { Injectable } from '@nestjs/common'; import { Injectable, UnauthorizedException } from '@nestjs/common'; import { CreateAdminDto } from './dto/create-admin.dto'; import { Admin } from './entities/admin.entity'; import { Repository } from 'typeorm'; Loading @@ -12,6 +12,10 @@ export class AdminService { } async findOne(email: string): Promise<Admin> { try { return await this.adminRepository.findOneByOrFail({ email }); } catch (error) { throw new UnauthorizedException('Admin not found'); } } }
backend/src/admin/dto/create-admin.dto.ts +2 −2 Original line number Diff line number Diff line import { ApiProperty } from '@nestjs/swagger'; import { ADMIN_ROLE } from 'src/enum/admin-role.enum'; import { UserStatus } from 'src/enum/user-status.enum'; import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; import { UserStatus } from 'src/shared/enum/user-status.enum'; export class CreateAdminDto { @ApiProperty() Loading
backend/src/admin/entities/admin.entity.ts +2 −2 Original line number Diff line number Diff line import { ADMIN_ROLE } from 'src/enum/admin-role.enum'; import { UserStatus } from 'src/enum/user-status.enum'; import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum'; import { UserStatus } from 'src/shared/enum/user-status.enum'; import { Entity, Column, PrimaryColumn } from 'typeorm'; @Entity() Loading
backend/src/app.module.ts +5 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ import { join } from 'path'; import { Town } from './town/entities/town.entity'; import { TownModule } from './town/town.module'; import { TownTraduction } from './town/entities/town-traduction.entity'; import { AuthModule } from './shared/service/auth.module'; import { APP_GUARD } from '@nestjs/core'; import { AuthGuard } from './auth/admin/auth.guard'; @Module({ imports: [ Loading @@ -38,12 +41,13 @@ import { TownTraduction } from './town/entities/town-traduction.entity'; StateModule, DatabaseSeederModule, TownModule, AuthModule, ServeStaticModule.forRoot({ rootPath: join(__dirname, '..', 'static'), }), ], controllers: [AppController], providers: [AppService, DatabaseSeederModule], providers: [AppService, DatabaseSeederModule, { provide: APP_GUARD, useClass: AuthGuard }], exports: [TypeOrmModule], }) export class AppModule {}
backend/src/auth/admin/auth.guard.ts 0 → 100644 +23 −0 Original line number Diff line number Diff line import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { AuthService } from 'src/shared/service/auth.service'; import { Roles } from '../role.decorator'; @Injectable() export class AuthGuard implements CanActivate { constructor( private authService: AuthService, private reflector: Reflector, ) {} async canActivate(context: ExecutionContext): Promise<boolean> { const requiredRole = this.reflector.get(Roles, context.getHandler()); if (!requiredRole) return true; const request = context.switchToHttp().getRequest(); let { authorization }: any = request.headers; if (!authorization) throw new UnauthorizedException('session expired! Please sign In'); authorization = authorization.split(' ')[1]; const role = await this.authService.validateToken(authorization); if (!requiredRole.includes(role)) throw new UnauthorizedException('Unauthorized access'); return true; } }