我具有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的角色保护程序,这是其中一个保护程序的示例。案件的管理员。它们正在按预期工作,但我无法在...
我建议创建一个通用的RolesGuard
,并使用自定义元数据为每个控制器或路由处理程序定义所需的角色:
[Kim回答的另一种方法而不是Kim的回答是使用Mixin
。 mixin概念由AuthGuard
本身使用。