Appsync - 有条件的所有者授权

问题描述 投票:0回答:1

我的模式中有

type SomeEntity
和字段
isPrivate
。 它受到
@auth
指令的保护,允许所有人进行
create
操作,并且仅对所有者进行
read
操作:

@auth(
  rules: [
    { allow: groups, groups: ["user"], operations: [create] }
    { allow: owner, operations: [read] }
  ]
)

现在我正在考虑如何允许

read
操作给所有人 if
isPrivate == true
并允许每个人操作 if
isPrivate == false
。 是否可以仅使用架构,或者我需要为此定制 Lambda 解析器?

graphql authorization aws-appsync
1个回答
0
投票

您不能直接使用字段的值 (isPrivate) 仅在架构内有条件地应用授权规则。 @auth指令在类型和字段级别运行,但不支持基于字段值的动态规则

为了实现这个目标

  1. 使用自定义 Lambda 解析器。

这允许您读取请求中的 isPrivate 字段,检查 用户的所有权或组成员身份,并允许或拒绝访问 相应地。

  1. 或者在架构中实现字段级授权。 (如果只保护部分字段)

将 SomeEntity 拆分为具有单独规则的字段,例如 privateField for 所有人的所有者和公共领域。

示例:

type SomeEntity
  @model
  @auth(
    rules: [
      { allow: groups, groups: ["user"], operations: [create] }
      { allow: owner, operations: [read] }
    ]
  ) {
  ....
  .....
  privateField: String @auth(rules: [{ allow: owner }])
  publicField: String
}
© www.soinside.com 2019 - 2024. All rights reserved.