Compare commits
2 Commits
4a2c479879
...
eecf60bef4
Author | SHA1 | Date |
---|---|---|
|
eecf60bef4 | 4 months ago |
|
13ee297d06 | 4 months ago |
3 changed files with 35 additions and 1 deletions
@ -0,0 +1,9 @@ |
||||
import { Module } from '@nestjs/common'; |
||||
import { JwtService } from '@nestjs/jwt'; |
||||
import { JwtAuthGuard } from './auth.guard';
|
||||
|
||||
@Module({ |
||||
providers: [JwtService, JwtAuthGuard], |
||||
exports: [JwtService, JwtAuthGuard],
|
||||
}) |
||||
export class AuthModule {} |
@ -0,0 +1,25 @@ |
||||
import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common"; |
||||
import { JwtService } from "@nestjs/jwt"; |
||||
|
||||
@Injectable() |
||||
export class RoleGuard implements CanActivate { |
||||
constructor( |
||||
private jwtService: JwtService, |
||||
) {} |
||||
async canActivate(context: ExecutionContext): Promise<boolean> { |
||||
const request = context.switchToHttp().getRequest(); |
||||
const token = request.headers["authorization"]?.split(" ")[1]; |
||||
if (!token) throw new UnauthorizedException("Authorization token is missing"); |
||||
try { |
||||
const decoded = this.jwtService.verify(token, { secret: process.env.JWT_SECRET }); |
||||
const userRole = decoded.role; |
||||
if (userRole !== "admin") { |
||||
throw new UnauthorizedException("You do not have the required role"); |
||||
} |
||||
request.user = decoded; |
||||
return true; |
||||
} catch (error) { |
||||
throw new UnauthorizedException("Invalid or expired token"); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue