6

从本指南中,我不明白我们如何在 graphql-ruby 中的字段上添加授权。

我了解我们如何拒绝访问整个对象,但我不明白我们如何阻止访问对象的某个字段。在我的用例中,我想阻止一些查询访问String field我的UserType.

可能吗?与field帮手?

4

3 回答 3

1

我使用了 gem graphql-guard

GUARD = lambda do |obj, args, ctx|
  ...some logics...
end

field :some_field, String, null: false, guard: GUARD

当我只想使用一些论点时lambda do |_, args, _|

于 2019-07-31T09:42:22.407 回答
1

这是一个例子:

module Types
  class User < Types::BaseObject
    field :private_string, String, null: true do
      def authorized?(object, args, context)
        # Do whatever logic you want and return true if the user is authorized.
        object.id == context[:current_user].id
      end
    end
  end
end

class MySchema < GraphQL::Schema
  # You'll need this in your schema to handle an unauthorized field.
  def self.unauthorized_field(error)
    raise GraphQL::ExecutionError, "The field #{error.field.graphql_name} on an object of type #{error.type.graphql_name} was hidden due to permissions"
  end
end

于 2021-07-06T15:12:48.300 回答
1

您可以在 GraphQL-ruby 中使用作用域或使用 gem graphql-guard

要使作用域起作用,您应该使用 Pundit作用域或 CanCan access_by

仅供参考,我还没有在任何地方使用它,但似乎两者都可以解决你的问题。

于 2019-03-14T12:32:55.153 回答