如何在控制器中添加多个Nestjs RoleGuards

问题描述 投票:0回答:2

我具有ADMIN,SUPERADMIN,USER,MODERATORS的角色保护,>

这是其中一个警卫的例子。案件的管理员。它们正在按预期工作,但我无法在控制器中添加多个警卫]

import { Injectable, CanActivate, ExecutionContext, HttpException, HttpStatus } from '@nestjs/common';

@/Injectable()
export class AdminGuard implements CanActivate {
 constructor() { }

 canActivate(context: ExecutionContext) {
 const request = context.switchToHttp().getRequest();
 const user = request.user;

 if (user.usertype == 'Admin') {
 return true;
        }
 throw new HttpException('Unauthorized access', HttpStatus.BAD_REQUEST);
    }
}

在我的控制器中,我有这个装饰器

 
@UseGuards(AuthGuard('jwt'), AdminGuard)

我希望能够做这样的事情

@UseGuards(AuthGuard('jwt'), AdminGuard, SuperAdminGuard)

@UseGuards(AuthGuard('jwt'), [AdminGuard, SuperAdminGuard, UserGuard])


@UseGuards(AuthGuard('jwt'), AdminGuard || SuperAdminGuard || UserGuard])

以上所有实现均无用。有人可以帮我解决一个更好的方法吗也许有些事情我做得不对。我已经检查了文档,但似乎无法正常使用]

我有ADMIN,SUPERADMIN,USER,MODERATORS的角色保护程序,这是其中一个保护程序的示例。案件的管理员。它们正在按预期工作,但我无法在...

angular typescript nestjs roles guard
2个回答
0
投票

我建议创建一个通用的RolesGuard,并使用自定义元数据为每个控制器或路由处理程序定义所需的角色:


0
投票

[Kim回答的另一种方法而不是Kim的回答是使用Mixin。 mixin概念由AuthGuard本身使用。

© www.soinside.com 2019 - 2024. All rights reserved.