Я пытаюсь выяснить, как вы можете защитить на уровне поля один-ко-многим @connection
с @auth
от мутаций, которые не должны быть разрешены.(то есть: запретить конкретному пользователю запускать мутацию, которая в конечном итоге будет вставлять сообщения как другой пользователь.)
Начиная с примера защиты мутации на уровне поля: https://aws -amplify.github.io / docs / cli / graphql # field-level-authorization
Я попытался сделать что-то вроде этого:
type User @model @auth(rules: [{ allow: owner, ownerField: "id" }]) {
id: ID!
posts: [Post]
@connection(name: "UserPosts")
@auth(rules: [{ allow: owner, ownerField: "id" }])
}
type Post @model {
title: String!
user: User!
@connection(name: "UserPosts")
@auth(rules: [{ allow: owner, ownerField: "userPostId" }])
}
Затем скажите, что уже есть пользователь сid regular-user-id
Очевидно, мои правила авторизации не останавливают другого пользователя, скажем, с id: malicious-user-id
для запуска этой мутации:
mutation {
createPost(input:{
title:"Oh this is BAD!"
postUserId: "regular-user-id"
}) {
title
}
}
Выполнение простого запроса, чтобы убедиться, что это действительно произошло:
query {
getUser(id:"regular-user-id"){
posts{
items
{
title
}
}
}
}
=>
{
"data": {
"getUser": {
"posts": {
"items": [
{
"title": "Regular User title"
},
{
"title": "Oh this is BAD!"
},
]
}
}
}
}
Я попробовал различные способы, чтобы выяснить это, и не смог найти никакой документации по двунаправленной аутентификации на уровне поля.Я довольно новичок в AppSync, поэтому думаю, что я что-то не понимаю, но тогда это настолько распространенный сценарий использования, что я действительно удивлен, что документации по этому поводу больше нет.
Некоторая помощьбыл бы очень признателен.