2017-07-19 80 views
0

還是很新的GraphQL,授權的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在rails中可用;在graphql-ruby中有沒有類似的東西? (例如,'受保護突變',無論如何希望在集中式設置中選擇性地保護可用輸出的特定部分)

或者應該採用完全不同的方法嗎?

+0

你如何最終做到了這一點任何更新? – maverick5

+1

@ maverick5如上所示,在解析器中驗證;因爲這或多或少是一條路(見下面的評論)。您可以在上下文中傳遞當前用戶(請參閱https://gist.github.com/benbonnet/5c8b90eaabf2a3cbf71a6c7f910bade0中的'execute'方法)。也就是說,我最終爲這些需求進入postgraphql(postgraphile)。一個巨大的節省時間,極大地減少了你的graphql代碼樣板,並且由於它的性質,對軌道「隱藏」的許多事情的真正啓發 – Ben

回答

1

截至本文撰寫之時,GraphQL規範沒有定義任何與authz/authn有關的事情。一般來說,人們將GraphQL層放在某種網關的後面,並將auth令牌傳遞給查詢。如何做到這一點取決於你的實施。在JavaScript GraphQL服務器中,有一個「上下文」將傳遞給所有解析器。

換句話說,在解析器級別保護查詢和突變是當前在GraphQL中的最佳實踐。

具體到紅寶石,但是,它看起來像有是內置了一些不錯的權威性功能軟件的付費版本。

http://graphql-ruby.org/pro/authorization