Panditを使用したGraphSQL Railsの型フィールド認証
GraphQL-rails プロの機能pundit integration 簡単な方法論がありますが、そのプロの機能と有料.
それでも提供する
Pundit Railsアプリケーションのための大きいオブジェクト指向の認可です.認可論理がシステムの現在の要件に従って時間とともに変更されることができるように、それはコントローラから認可論理を切り離すのを助けます.
Graphical Railsでは、いくつかのフィールドをすべてのユーザではなく特定のユーザにしか表示しないようにします.ここでは、成功した場合は、フィールドの値をタイプに応じて最初に表示します
私は、Pundit宝石がインストールされて、あなたのコードに間違いなくGraphqlとともに初期化されると仮定します.
ユーザーがポストを持っている例を取りましょう、そして、ポストの所有者だけはポストの上で見解の数を見ることができます.しかし、GraphSQLのポストタイプを持っているので、所有者以外の人々はその分野にアクセスできます.それで、我々はポストの所有者のためにフィールドを認可しています.
ハッピーコーディング!
それでも提供する
authorized?
オープンソースバージョンのメソッドですが、手動で行う必要があります.フィールド承認についてもっと学ぶことができますhere .Pundit Railsアプリケーションのための大きいオブジェクト指向の認可です.認可論理がシステムの現在の要件に従って時間とともに変更されることができるように、それはコントローラから認可論理を切り離すのを助けます.
フィールド認可
Graphical Railsでは、いくつかのフィールドをすべてのユーザではなく特定のユーザにしか表示しないようにします.ここでは、成功した場合は、フィールドの値をタイプに応じて最初に表示します
nil
.私は、Pundit宝石がインストールされて、あなたのコードに間違いなくGraphqlとともに初期化されると仮定します.
ユーザーがポストを持っている例を取りましょう、そして、ポストの所有者だけはポストの上で見解の数を見ることができます.しかし、GraphSQLのポストタイプを持っているので、所有者以外の人々はその分野にアクセスできます.それで、我々はポストの所有者のためにフィールドを認可しています.
# app/policies/post_policy.rb
class PostPolicy < ApplicationPolicy
# only if user is the owner of the post
def owner?
user.present? && record.user == user
end
class Scope < Scope
def resolve
scope.all
end
end
end
ポストポリシーを所有者ロールで定義したので、ビュー型のフィールド認証のポスト型を定義します.# app/graphql/types/post_type.rb
module Types
class PostType < Types::BaseObject
field :id, ID, null: false
# .... remaining fields
field :number_of_views, Integer, null: true, description: 'number of times user has viewed your post' do
def authorized?(object, args, context)
Pundit.policy(context[:current_user], object)&.owner?
end
end
# resolvers
def number_of_views
object.views.count
end
end
end
authorized?
trueまたはfalseを返します.したがって、承認が失敗するならnil
その他の値が表示されます.もしそうならばowner?
定義はそれを簡単に行うことができます変更する必要があります.また、同じメソッド名を作成できますnumber_of_views
pundit方針で完全に制限を制限する方針で.ハッピーコーディング!
Reference
この問題について(Panditを使用したGraphSQL Railsの型フィールド認証), 我々は、より多くの情報をここで見つけました https://dev.to/sulmanweb/type-field-authorization-in-graphql-rails-with-pundit-1hffテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol