还是GraphQL的新手,
这个想法是为了“安全”。突变,意味着限制那些在上下文中传递给当前用户的突变。基本的一个:
Create = GraphQL::Relay::Mutation.define do
name "AddItem"
input_field :title, !types.String
return_field :item, Types::ItemType
return_field :errors, types[types.String]
resolve -> (object, inputs, ctx) {
if ctx[:current_user]
... do the stuff...
else
...returns an error...
end
}
end
让我们对一个有多个突变的人说...这种情况必须在每次需要时重复。
我明显偏向轨道中可用的before_action
; graphql-ruby中有类似的东西吗? (例如,'受保护的突变' ,无论如何都希望在集中设置中有选择地保护可用输出的特定部分)
或者方法应该完全不同?
答案 0 :(得分:1)
截至撰写本文时,GraphQL规范并未定义与authz / authn有关的任何内容。一般来说,人们将他们的GraphQL层放在某种网关之后,并使用查询传递auth令牌。如何做到这一点取决于您的实施。在JavaScript GraphQL服务器中,有一个“上下文”将传递给所有解析器。
换句话说,在解析器级别保护查询和突变是GraphQL中的最佳实践。
特定于Ruby,它看起来确实有一个付费版本的软件,内置了一些很好的auth功能。