AWS Amplify GraphQL 查询 - 列出所有元素并在不同视图中过滤所有者的元素
Posted
技术标签:
【中文标题】AWS Amplify GraphQL 查询 - 列出所有元素并在不同视图中过滤所有者的元素【英文标题】:AWS Amplify GraphQL query - list all elements and filter the owner's ones in different view 【发布时间】:2020-08-27 11:54:08 【问题描述】:我已经创建了简单的 grapql 架构:
type Announcement @model @auth(
rules: [ allow: owner ])
id: ID!
name: String!
selectedTags: String!
owner: String!
price: Float
description: String!
image: S3Object
createdAt: String
AWS Amplify 为我生成 listAnnouncements
查询,让我可以获取其所有者的所有公告,因此在所有者的帐户中,我只会看到他创建的那些。在单独的视图中,我想列出由其他用户创建的所有公告。
我认为问题在于我访问查询的方式,因此我检查了 AWS Amplify 中的 <UserContext>
和 <Connect>
方法,但看起来它并没有解决问题。
有没有办法让用户获得对所有公告的读取权限,并且只能修改他创建的那些?
【问题讨论】:
您的应用程序是否允许访客用户?如果没有,您可以将所有用户添加到组中,或者使用管理员查询 api docs.amplify.aws/cli/auth/admin#enable-admin-queries 手动添加,或者在他们注册/登录时使用 cognito 触发器等。然后您可以添加此规则:allow: groups, groups: [ "yourGroupName"], operations: [read] 如果您允许来宾用户使用您的应用程序,我认为您必须使用具有多种身份验证类型的可能性(使用 api-key / iam 角色)。看看这篇文章:aws.amazon.com/blogs/mobile/graphql-security-appsync-amplify 它没有,所以我更新了你提到的 graphQL 模式,但是当我遇到一些错误时,我已经更新了放大。在那次更新之后,我失去了与我使用放大功能的服务的连接 - 你知道是否有一个选项可以重复使用以前的设置,或者我需要重新设置吗? 你使用git吗?如果是这样,您也许可以将其设置回以前的版本,然后再次运行放大推送 【参考方案1】:您可以这样做的一种方法是为您的api
(amplify update api
) 设置多种身份验证模式,例如,您可以将 Cognito 设置为默认身份验证模式,而 IAM 作为辅助模式。一旦设置好(和amplify push
ed),您就可以在您的模型上添加身份验证规则:
type Announcement @model @auth(
rules: [
allow: owner
allow: public, provider: iam, operations: [read]
]
)
您还需要在 AWS 控制台中进入 Cognito 并在您的身份池中启用未经身份验证的访问:
仔细检查是否为 Auth 和 UnAuth 角色设置了首选角色,然后选中 ✅ 那个小框,上面写着“启用对未经身份验证的身份的访问”。
最后,您需要tweak your code to tell the Amplify graphQL client to use IAM for those unauthenicated queries,例如:
return API.graphql( queries.MyQuery, variables, 'AWS_IAM' )
到目前为止,我已经在几个项目中使用了它,希望对您有所帮助!
【讨论】:
以上是关于AWS Amplify GraphQL 查询 - 列出所有元素并在不同视图中过滤所有者的元素的主要内容,如果未能解决你的问题,请参考以下文章
带有 AWS Amplify 的 GraphQL - 如何启用对查询的排序
AWS Amplify GraphQL - 一对多连接在查询时返回空列表
如何在 aws amplify 中使用 graphQL 限制
使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?