在 AppSync @auth 规则中,如何将 ownerField 设置为数组中的 属性?
In an AppSync @auth rule, how do I set an ownerField to a property in an array?
假设我有以下具有 User
类型的 AppSync GraphQL 模式,以及具有 editors
字段设置为 User
数组的 Post
类型:
type User
@model
@auth(rules: [
{ allow: owner }
])
{
id: ID!
owner: String!
username: String!
}
type Post
@model
@auth(rules: [
{ allow: owner },
# Can I do this?
# { allow: owner, ownerField: "editors.owner", operations: [update] }
])
{
id: ID!
owner: String!
title: String!
content: String
editors: [User]
}
如何创建 @auth
规则来为 editors
数组中的 User
提供更新权限?
如果您使用的是亚马逊 Cognito 用户池,则应将 Post 中的编辑器类型设置为字符串数组,并将值设置为您想要访问的用户的 Cognito ID .这是解释 in the amplify cli documentation.
要让编辑器成为 User 类型,我建议您创建另一个名称不同的参数(例如 editorUsers)并将其连接到 User 模型,如所述here
您的架构应如下所示:
type User
@model
@key(name: "byUser", fields: ["username"])
@auth(rules: [
{ allow: owner }
])
{
id: ID!
owner: String!
username: String!
}
type Post
@model
@auth(rules: [
{ allow: owner },
{ allow: owner, ownerField: "editors", operations: [update] }
])
{
id: ID!
owner: String!
title: String!
content: String
editors: [String]
editorsUsers: [User] @connection(keyName: "byUser", fields: ["id"])
}
假设我有以下具有 User
类型的 AppSync GraphQL 模式,以及具有 editors
字段设置为 User
数组的 Post
类型:
type User
@model
@auth(rules: [
{ allow: owner }
])
{
id: ID!
owner: String!
username: String!
}
type Post
@model
@auth(rules: [
{ allow: owner },
# Can I do this?
# { allow: owner, ownerField: "editors.owner", operations: [update] }
])
{
id: ID!
owner: String!
title: String!
content: String
editors: [User]
}
如何创建 @auth
规则来为 editors
数组中的 User
提供更新权限?
如果您使用的是亚马逊 Cognito 用户池,则应将 Post 中的编辑器类型设置为字符串数组,并将值设置为您想要访问的用户的 Cognito ID .这是解释 in the amplify cli documentation.
要让编辑器成为 User 类型,我建议您创建另一个名称不同的参数(例如 editorUsers)并将其连接到 User 模型,如所述here
您的架构应如下所示:
type User
@model
@key(name: "byUser", fields: ["username"])
@auth(rules: [
{ allow: owner }
])
{
id: ID!
owner: String!
username: String!
}
type Post
@model
@auth(rules: [
{ allow: owner },
{ allow: owner, ownerField: "editors", operations: [update] }
])
{
id: ID!
owner: String!
title: String!
content: String
editors: [String]
editorsUsers: [User] @connection(keyName: "byUser", fields: ["id"])
}