Один из лучших, если не самый лучший путеводитель, который я нашел, это здесь . Он предоставляет обширную документацию и руководства. Попробуйте использовать метод self.visible?(ctx)
. Я также чувствую, что вы боретесь с драгоценным камнем вместо того, чтобы работать с ним. Попробуйте реструктурировать ваш код, как описано ниже. С ним может быть проще работать.
объект context
не присоединяется к схеме, пока к ней не будет вызван метод execute
. Обычно это происходит в вашем файле app / controllers / graphql_controller.rb. В общем, вы не сможете получить доступ к объекту context, пока ваше приложение не выполнит вашу схему. Поскольку QueryType и MutationType присоединяются к нему после того, как вы захотите сделать следующее, предполагая, что вы использовали встроенный инструмент генерации кода.
# '/app/graphql/my_schema.rb'
class MySchema < GraphQL::Schema
mutation(Types::MutationType)
query(Types::QueryType)
end
# '/app/graphql/types/mutation_type.rb'
class Types::MutationType < Types::BaseObject
field :some_admin_mutation, mutation: Mutations::Admin::SomeAdminMutation
end
# '/app/graphql/mutations/admin/some_admin_mutation.rb'
class Mutations::Admin::SomeAdminMutation < Mutations::BaseMutation
...
# using this class method, you can choose to hide certain mutations
def self.visible?(context)
context[:current_user].admin?
end
end
протестируйте его, используя следующий запрос graphql (я использую apollo для chrome)
{
__schema {
mutationType {
name
fields {
name
}
}
}
}