首页 > 解决方案 > AWS Amplify AppSync GraphQL @Auth 指令:如何禁止为公共用户列出元素

问题描述

我正在创建一个带有 Amplify 后端的 React 应用程序。到目前为止效果很好,但我想禁止某些用户可以列出一些元素。让我举一个例子 graphql 定义:

type Customer @model 
@auth(rules: [
   {allow: public, , operations: [read,create,update]},
   {allow: groups, groups: ["admin","partner"] }])  
{
   id: ID!
   firstName: String
   lastName: String
   email: String
   phone: String
}

我们有未登录的客户,因此他们是公开的。他们知道他们的 id(因为它在他们创建客户条目后的 url 中)并且他们应该能够更新、读取和创建他们自己的用户。那工作得很好。 不幸的是,他们也可以使用 listCustomers 查询。所以他们可以看到所有其他条目。我可以以某种方式禁止这个吗?据我了解,“读取”操作意味着“获取”和“列表”。

认知群体也应该如此。“admin”应该能够做所有事情,包括“list”和“partner”应该只能“get”。

有人有想法吗?我已经阅读了文档并用谷歌搜索了它,但似乎我没有找到答案。

此致

标签: amazon-web-servicesgraphqlauthorizationamplify

解决方案


回答我的问题:

您可以为授权规则添加 {allow: public, queries: [get, list], mutation: [create,update]}。不幸的是,这已被弃用。我不知道将来是否会有类似的东西。

请参阅:https ://docs.amplify.aws/cli/graphql-transformer/auth/#definition

type Customer @model @auth(rules: [
    { allow: public, queries: [get], mutations: [create,update]},
    { allow: groups, groups: ["admin"] },
    { allow: groups, groups: ["partner"], queries: [get],  mutations: []}])  
{
id: ID!
firstName: String
lastName: String
email: String
phone: String
request: [Request] @connection(keyName: "byCustomer", fields: ["id"])
}

推荐阅读