Как сделать так, чтобы люди не запрашивали отношения между объектами, которые они не должны видеть в graphql?
Например, предположим, что у нас есть следующая модель данных.
type Board {
id: ID! @unique
name: String!
boardUserRoles: [BoardUserRole!]!
}
type BoardUserRole {
id: ID! @unique
board: Board!
user: User!
role: BoardRole!
}
type User {
id: ID! @unique
tasks: [Task!]!
userName: String! @unique
boardUserRoles: [BoardUserRole!]!
}
Это настройка, в которой есть пользователи, которые имеют доступ к определенным доскам. И BoardUserRole
определяет, какую роль играет пользователь для конкретной таблицы.
Теперь я захожу и запрашиваю доску, на которую у меня есть разрешение, и смотрю на ее название.
query {
board(where: {id: "3"}) {
id
name
}
}
Это прекрасно. Однако я могу связаться с другими пользователями системы и увидеть задачи, которые у них есть, если я изменю запрос. Я могу видеть все, что связано с этим пользователем.
query {
board(where: {id: "3"}) {
id
name
boardUserRoles {
user {
tasks
}
}
}
}
Как защитить себя от запросов такого типа?