订阅授权
|
这是 GraphQL Library 7 版本的文档。对于长期支持 (LTS) 版本 5,请参考 GraphQL Library 5 LTS 版本。 |
|
在 Aura 控制台创建的数据 API 目前不支持 |
订阅需要其专属的授权规则,这些规则通过 @subscriptionsAuthorization 指令进行配置。这些规则不同于查询和变更的授权规则,因为它们使用可用于订阅事件的过滤规则。这些过滤规则只能针对受事件影响的节点属性进行过滤。
所有订阅授权规则都隐含要求进行身份验证,因为这些规则通常会针对 JWT 负载中的值进行评估。
过滤规则
过滤规则阻止包含用户无权访问的信息的事件传递给用户——用户不会收到任何提示。这些规则在事件从数据库返回时进行评估,随后再广播给订阅的 GraphQL 客户端。
例如,下面演示如何过滤掉与监听事件的用户 JWT 不匹配的 User 事件
type User @node @subscriptionsAuthorization(filter: [
{ where: { node: { id: { eq: "$jwt.sub" } } } }
]) {
id: ID!
}
过滤可以配置为仅在特定事件上执行
-
CREATED -
UPDATED -
DELETED
例如,仅对类型本身的变更而非其关系进行过滤
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!
}