繁体   English   中英

NestJS Permissions Guard - 最有效的方式

[英]NestJS Permissions Guard - the most efficient way

目前,我正在研究 NestJS API。 我想准备 Permissions Guard,但对此我有疑问。 用户只能拥有一个角色,一个角色可以拥有很多权限。 角色权限是在管理面板上设置的,因此角色权限经常可以更改。 我无法理解如何处理 PermissionGuard 中的权限。 我知道我可以在数据库中检查它们的当前状态,但我认为这不是最好的方法,因为数据库会被过于频繁地查询。

我应该怎么办? 任何想法?

效果很好。 这是一项 JwtAuthGuard 改进并检查一个权限。

import { CanActivate, ExecutionContext, Type, mixin } from '@nestjs/common';

import { EPermission } from '../path-with-your-enum-values';
import { JWTRequestPayload } from '../request-payload-type';
import { JwtAuthGuard } from './jwt-auth.guard';

export const PermissionGuard = (permission: EPermission): Type<CanActivate> => {
    class PermissionGuardMixin extends JwtAuthGuard {
        async canActivate(context: ExecutionContext) {
            await super.canActivate(context);

            const request = context.switchToHttp().getRequest<JWTRequestPayload>();
            const user = request.user;

            if (!user || !user.permissions) {
                return false;
            }

            return user.permissions.includes(permission);
        }
    }

    return mixin(PermissionGuardMixin);
};

并使用控制器:

@Post(':taskId/moderate')
@UseGuards(PermissionGuard(EPermission.MODERATE))
public async moderate(@Param('taskId') taskId: string): Promise<any> {
    // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM