订阅授权

这是 GraphQL 库版本 7 的文档。对于长期支持 (LTS) 版本 5,请参阅 GraphQL 库版本 5 LTS

订阅需要自己的授权规则,这些规则通过 @subscriptionsAuthorization 指令配置。这些规则与查询和突变(mutations)的授权规则不同,因为它们使用适用于订阅事件的过滤规则。这些过滤规则只能用于根据受事件影响的节点的属性进行过滤。

所有订阅授权规则都隐含地要求认证,因为这些规则通常是根据 JWT 有效负载中的值进行评估的。

过滤规则

过滤规则可防止包含用户无权访问信息的事件到达用户——用户不会收到任何此类情况的指示。这些规则在事件从数据库返回时进行评估,然后才广播给订阅的 GraphQL 客户端。

例如,以下是如何过滤掉与正在侦听事件的用户 JWT 不匹配的 User 事件

type User @node @subscriptionsAuthorization(filter: [
    { where: { node: { id: { eq: "$jwt.sub" } } } }
]) {
    id: ID!
}

过滤可以配置为仅在特定事件上执行

  • 已创建

  • 已更新

  • 已删除

  • 关系已创建

  • 关系已删除

例如,仅要求对类型本身的突变进行过滤,而不是对其关系进行过滤

type User @node @subscriptionsAuthorization(filter: [
    { events: [CREATED, UPDATED, DELETED], where: { node: { id: { eq: "$jwt.sub" } } } }
]) {
    id: ID!
}

无需认证的授权

默认情况下,每次授权检查都隐式要求认证,但可以根据每个规则禁用此功能。例如,当节点具有指示该节点是否应公开的属性时,就可能出现这种情况。

例如,在某些 Post 节点是私有的而其他 Post 节点是公共的情况下,以下是设置方法

type Post @node @subscriptionsAuthorization(filter: [
    { requireAuthentication: false, where: { node: { public: { eq: true } } } }
]) {
    title: String!
    content: String!
    public: Boolean!
}
© . All rights reserved.