4 changed files with 34 additions and 3 deletions
@ -0,0 +1,3 @@ |
|||||
|
import { Reflector } from '@nestjs/core'; |
||||
|
|
||||
|
export const Roles = Reflector.createDecorator<string[]>(); |
||||
@ -0,0 +1,26 @@ |
|||||
|
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; |
||||
|
import { Reflector } from '@nestjs/core'; |
||||
|
import { Roles } from './roles.decorator'; |
||||
|
|
||||
|
@Injectable() |
||||
|
export class RolesGuard implements CanActivate { |
||||
|
constructor(private reflector: Reflector) {} |
||||
|
|
||||
|
canActivate(context: ExecutionContext): boolean { |
||||
|
const roles = this.reflector.get(Roles, context.getHandler()); |
||||
|
if (!roles) { |
||||
|
return true; |
||||
|
} |
||||
|
const request = context.switchToHttp().getRequest(); |
||||
|
const user = request.user; |
||||
|
|
||||
|
roles.forEach(role => { |
||||
|
if(user.permissions.includes(role) == false) { |
||||
|
console.log("Missing " + role + " permission") |
||||
|
return false; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue