我发现的最好的指南之一就是这里。它提供了广泛的文档和指南。尝试使用该self.visible?(ctx)
方法。我也觉得你是在与宝石战斗而不是与它合作。尝试按照以下概述重构您的代码。它可能更容易使用。
在调用该方法之前,该context
对象不会附加到模式。execute
这通常发生在您的“app/controllers/graphql_controller.rb”文件中。所以总的来说,在您的应用程序执行您的模式之前,您将无法访问“上下文”对象。由于 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 for chrome)
{
__schema {
mutationType {
name
fields {
name
}
}
}
}