Closed GabrielCamargoL closed 1 year ago
src/modules/auth/guards/roles.guard.ts
@Injectable() export class RolesGuard implements CanActivate { constructor(private reflector: Reflector) { } canActivate(context: ExecutionContext): boolean { const requiredRoles = this.reflector.getAllAndOverride<RoleEnum[]>('roles', [ context.getHandler(), context.getClass(), ]); if (!requiredRoles) { return true; } const { user } = context.switchToHttp().getRequest(); return requiredRoles.some((role) => user?.role?.includes(role)); } }
src/modules/auth/decorators/has-roles.decorator.ts
export const HasRoles = (...roles: RoleEnum[]) => SetMetadata('roles', roles);
Exemplo do uso ao inserir o RBAC em uma rota, ex: deletar usuario
@HasRoles(RoleEnum.ADMIN) @UseGuards(AuthGuard('jwt'), RolesGuard) @Delete('/:id') async deleteUser(@Param('id') id: string) { const userFound = await this.userService.findById(id); if (userFound === null) throw new NotFoundException('Usuário não encontrado.') return this.userService.delete(id); }
Favor, conferir rotas protegidas com base nos apontamentos dados pela Product Owner:
Autorização por RBAC (Role Based Access Control)
Print dos resultados obtidos
Códigos
src/modules/auth/guards/roles.guard.ts
src/modules/auth/decorators/has-roles.decorator.ts
Exemplo do uso ao inserir o RBAC em uma rota, ex: deletar usuario
Comentários Adicionais
Favor, conferir rotas protegidas com base nos apontamentos dados pela Product Owner: