gpt4 book ai didi

amazon-web-services - 如何防止更新 AWS Amplify GraphQL API 的 ownerField?

转载 作者:行者123 更新时间:2023-12-02 16:17:33 32 4
gpt4 key购买 nike

我使用 AWS 的 Amplify 创建了一个 GraphQL API。在架构中,我有一个 Comment 模型,如下所示:

type Comment
@auth(rules: [{ allow: owner }, { allow: private, operations: [read] }, { allow: public, operations: [read] }])
@model
@key(name: "byAuthor", fields: ["authorID"])
@key(name: "byPost", fields: ["postID"]) {
content: String!
createdAt: AWSDateTime!
id: ID!
owner: String
postID: ID!
updatedAt: AWSDateTime!
}

这授予所有者创建、读取、更新和删除的权限,并将未经身份验证/经过身份验证的非所有者用户限制为只读。这按预期工作;但是,所有者可以更新 ownerField 的值,实质上将评论归于另一个用户……这是一个禁忌。为了防止这种情况,我尝试使用字段级权限(见下文);但是,这似乎并没有停止更新。

...
owner: String @auth(rules: [{ allow: owner, operations: [ create ]}])
...

有什么我想念的吗?非常感谢任何帮助 - 谢谢!

最佳答案

你非常接近。使用字段级 @auth 指令,您想明确授予所有者创建读取的能力,并明确拒绝世界的能力更新删除。它可能看起来像:

type Todo
@model
@auth(rules: [{ allow: owner, ownerField: "author" }]) {
id: ID!
name: String!
author: String
@auth(
rules: [
{ allow: groups, groups: ["FORBIDDEN"], operations: [update, delete] }
{ allow: owner, ownerField: "author", operations: [create, read] }
]
)
}

在这里,“FORBIDDEN”组是一个不存在的组。它的名称可以是任何名称,只要您不打算在将来使用该名称实际创建一个组即可。因为没有用户会拥有“FORBIDDEN”组声明,所以对该字段的任何/所有 updatedelete 操作都将失败。

关于amazon-web-services - 如何防止更新 AWS Amplify GraphQL API 的 ownerField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66267351/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com