You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在HotChocolate中是否可以使用自定义服务实现授权校验?

首先明确:官方默认的Authorize方法没有提供直接接收布尔值的重载,你想要的调用方式没办法直接用原生方法实现,但可以通过自定义扩展的方式快速实现你的需求,改造成本极低。

实现方案1(完全匹配你想要的调用形式)

你可以给descriptor对应的类型写一个自定义扩展方法,直接接收布尔类型的授权结果,内部自己处理授权失败的逻辑即可:

// 自定义扩展方法,注意把参数里的EndpointDescriptor换成你实际的descriptor类型
public static class AuthorizationExtensions
{
    public static void Authorize(this EndpointDescriptor descriptor, bool isAuthorized)
    {
        if (!isAuthorized)
        {
            // 这里按你的业务需求处理授权失败逻辑,比如抛未授权异常、给descriptor加拒绝标记等
            throw new UnauthorizedAccessException("当前用户无操作权限");
        }
    }
}

扩展方法定义完成后,你就可以直接使用你写的调用形式:

bool isAuthorized = _permissionService.Authorize("Admin");
descriptor.Authorize(isAuthorized);

实现方案2(更符合框架规范的集成方式)

如果你不想提前计算授权结果,也可以直接把你的自定义权限服务集成到官方授权管道中,自定义授权逻辑后,你可以直接沿用官方的调用写法,底层自动走你自己的权限校验规则:

// 自定义授权逻辑后,调用写法和官方一致,底层自动调用你的PermissionService
descriptor.Authorize("Admin");

这种方案的优势是不需要你在每个授权位置手动调用权限服务,框架会自动触发校验,统一管理更方便。

内容的提问来源于stack exchange,提问作者Bye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:54:03