首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对graphql-ruby中的字段进行授权

对graphql-ruby中的字段进行授权
EN

Stack Overflow用户
提问于 2019-03-09 16:29:53
回答 3查看 1.3K关注 0票数 6

从这个guide中,我不明白我们如何在graphql-ruby中的字段上添加授权。

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

有可能吗?使用field帮助器?

EN

回答 3

Stack Overflow用户

发布于 2019-07-31 17:42:22

我用的是gem graphql-guard

代码语言:javascript
复制
GUARD = lambda do |obj, args, ctx|
  ...some logics...
end

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

当我只想使用像lambda do |_, args, _|这样的一些参数时

票数 1
EN

Stack Overflow用户

发布于 2019-03-14 20:32:55

您可以在GraphQL-ruby中使用scoping,也可以使用gem graphql-guard

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

仅供参考,我还没有在任何地方使用过它,但在我看来,这两个都可以解决你的问题。

票数 0
EN

Stack Overflow用户

发布于 2021-07-06 23:12:48

下面是一个例子:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55075434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档