Symfonyを用いたGraphSQLのアクセス制御


承認は、ほぼすべてのWebアプリケーションの一部であり、特定のデータへのアクセス制御は、アプリケーションのセキュリティに不可欠です.同様に、GraphSQL APIとOverblog's GraphQL Bundle , これは簡単にできます.

フィールドアクセス制御
すべてのGraphSQL APIには、少なくとも1つのルート型、クエリがあります.ルートタイプは、特定のフィールドに規則を設定することでアクセスを制御したい、最も一般的な場所です.いくつかの例では、ユーザーだけを許可することによって、いくつかの管理関連のクエリへのアクセスを制御することができますROLE_ADMIN へのアクセスまたは許可user 要求されたユーザが現在認証されているユーザか、あるいはROLE_ADMIN 役割これはexpression language フィールド設定オプションの関数resolve .

使用hasRoleこの式言語関数は、バンドルで提供され、自明です-現在認証されているユーザーが引数として提供する役割を持っているかどうかを確認します.
Query:
  type: object
  config:
    fields:
      activityLog:
        type: "[Activity!]!"
        access: "@=hasRole('ROLE_ADMIN')"
        resolve: "@=resolver('ActivityLog')"

使用isGrantedこの関数はofficial documentation , しかし、あなたが密接に見えるならば、それは実際に存在しますcodebase . 時々、役割をチェックすることは十分でありません、そして、我々は複雑な論理がユーザーにアクセスがあるかどうか決定するのを望みます.これはvoters and isGranted 表現言語機能.
Query:
  type: object
  config:
    fields:
      user:
        type: 'User'
        access: "@=isGranted('user_access', args['id'])"
        args:
          id:
            type: 'ID!'
        resolve: "@=resolver('User', [args['id']])"
あなたが質問をするか、コメントまたは経験があるならば、あなたは共有したいです.