Я пытаюсь настроить бэкэнд Apollo для проекта, над которым я работаю, где я пытаюсь реализовать директивы схемы.Однако я не могу добавить свою директиву схемы к мутациям.Итак, на мой главный вопрос: как мне реализовать директиву auth для мутаций?
Я добавил @auth(requires: ADMIN)
в конец моего запроса пользователей, который работает нормально.Затем Apollo потребует токен на предъявителя с правами администратора для выполнения запроса пользователей.
extend type Query {
user(id: ID!): User
users: [User!]! @auth(requires: ADMIN)
}
Когда я попытался сделать то же самое для мутации editMyUser, директива auth, похоже, применяется для всехмутации, а не только ту, которую я хотел.Даже мутация signUp выдаст ошибку «not authorised», когда я добавлю часть @auth к мутации editMyUser.Даже при том, что между ними нет никакой связи.
Поле роли, которое должно быть передано директиве auth при вызове, выходит из системы пустым.
extend type Mutation {
signUp(
username: String!
firstName: String
lastName: String
password: String!
isAdmin: Boolean
isActive: Boolean): User!
login(
username: String!
password: String!): User!
editMyUser(
id: ID!
firstName: String
lastName: String
password: String): User! @auth(requires: USER)
adminEditUser(
id: ID!
firstName: String
lastName: String
password: String
isActive: Boolean
isAdmin: Boolean
isBanned: Boolean): User!
}
Вот как я реализовалдиректива схемы
export default gql`
directive @auth(requires: Role = ADMIN) on OBJECT | FIELD_DEFINITION
enum Role {
ADMIN
USER
}
https://github.com/jwhenshaw/graphql-directives-auth Это директива Auth, которую я реализовал в своем коде для справки.
Итак, подведем итог: когда я реализую директивы auth для мутаций, они реализуются для всех мутаций, а не только для одной, и она даже не работает правильно, поскольку роли не передаются в директиву.
Я бы хотел помочь с этим.Спасибо!