Как включить publi c query appsyn c Amplify - PullRequest
1 голос
/ 12 июля 2020

Я использую AWS Amplify with Appsyn c. Я хочу добавить publi c query listproducts, и это доставляет мне больше всего трудностей. Насколько я понимаю, я знаю, что доступ к publi c должен быть предоставлен с использованием apiKey или iam. Проблема в том, что моя лямбда-функция мутации enroll внутренне делает мутацию create и использует разрешения iam для создания этих записей. Я включил allowUnauthenticatedIdentities=true, но при использовании разрешений iam все еще получаю отказ в доступе для запроса listproducts. Мне нужно убедиться, что если я go использую метод iam, у меня есть способ различать guish между publi c iam и частным iam, выполняющим административную работу в моем enroll позвоните, и я не вижу способа определить, хочу ли я использовать роль iam с проверкой подлинности или без проверки подлинности.

type Product @aws_iam {
  id: ID!

}

type UserCourse
  @model
  @auth(
    rules: [
      { allow: groups, groups: ["Admin"] }
      { allow: owner, operations: [read] }
      { allow: private, provider: iam, operations: [create, read] }
    ]
  ) {
  id: ID!
  courseId: String
  invoice: String
}

type Query {
  listproducts: [Product]
    @function(name: "listproducts-${env}")
    @auth(rules: [{ allow: public, provider: iam }])
}

type Mutation {
  enroll(courseId: String, priceId: String, source: String): UserCourse
    @function(name: "coursesenroll-${env}")
}

Что мне здесь не хватает? Я подключаюсь с помощью Gatsby и AWSAppSyncClient. Есть ли какой-нибудь тривиальный способ сделать это, что мне просто не хватает? В моем идеальном мире я мог бы запускать неаутентифицированный запрос с пулами когнитивов, и он возвращался бы, поэтому мне не приходилось иметь дело с созданием экземпляров различных приложений-синхронистов в зависимости от того, вошел ли я в систему или нет. Я попытался вручную добавить разрешения для роли unauth, и я не уверен, что это правильный подход, но я был бы счастлив go и для этого маршрута, если я не могу сделать unauth из коробки с ampify.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "appsync:GraphQL"
            ],
            "Resource": [
                "arn:aws:appsync:eu-central-1:SOME_LONG_STRING:apis/SOME_LONG_STRING/types/Query/fields/listproducts"
            ]
        }
    ]
}
...