代码之家  ›  专栏  ›  技术社区  ›  Funk Soul Ninja

使用AWS AppSync(with amplify),如何允许经过身份验证的用户只读访问,但只允许对象所有者进行突变?

  •  0
  • Funk Soul Ninja  · 技术社区  · 6 年前

    我使用Cognito用户池作为默认的身份验证方法。我还使用iam作为lambda后端。我在lambda函数中使用aws appsync客户端来实现一些自定义解析器。

    假设用户的类型基本上是这样的:

    type User {
      id: ID!
      displayName: String!
    }
    

    我想做的是:

    1. 允许lambda函数(带iam)完全读/写访问。
    2. 允许对通过cognito用户池进行身份验证但不是对象所有者的用户进行只读访问。

    我一直在用@auth指令进行挑选和催促,试图得到我想要的结果,但是没有任何东西能起作用。我已经看过文档 AWS GraphQL Transform Docs

    type User
      @model
      @auth(rules: [
        { allow: owner, operations: [create, update, delete] }
        { allow: private, provider: iam, operations: [update, delete] }
      ]) {
      id: ID!
      displayName: String!
    }
    

    据我所知,通过从@auth指令的操作列表中删除read,可以删除get和list查询的检查。我做错什么了?我如何达到我想要的结果?

    编辑:为了澄清,我已经启用了多个授权类型。(默认情况下,cognito用户池和lambda解析器的iam)。我的问题是:如何使用@auth指令来获得预期的结果?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Funk Soul Ninja    6 年前

    AuthProvider{apiKey iam oidc 用户池 }


    type User @model @auth(rules:  [
          { allow: owner ,operations:  [create, update, delete]},
          { allow: private, provider: iam, operations: [read, update, delete] }
          { allow: private, provider: userPools, operations: [read] }
        ]) {
      id: ID!
      name: String!
    }
    
        2
  •  0
  •   parkerfath    6 年前

    https://aws.amazon.com/blogs/mobile/using-multiple-authorization-types-with-aws-appsync-graphql-apis/

    对于您的用例,您可能还需要在解析器中添加一些代码,以控制哪些用户可以执行哪些操作,如中所述: https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html

    E、 g.按照#如果($上下文.结果[“所有者”]==$context.identity.username)

    https://github.com/aws-amplify/amplify-cli/issues/2694

    推荐文章