Access Control
ユーザーのログイン状態、ロールや権限、またはIPアドレスに基づいて、スキーマへの細粒度のアクセスを付与し、誰がどのデータにアクセスできるかを管理します。

Click to watch tutorial video - 08:04
アクセス制御リストを定義して、ユーザーによるAPIへの細粒度のアクセスを管理します。
アクセス制御リスト
この拡張機能を使用すると、アクセス制御リストを作成し、以下のルールを用いて、GraphQLスキーマのさまざまな要素(オペレーション、フィールド、ディレクティブ)に誰がアクセスできるかを管理できます。
- アクセスを無効化する
- ユーザーがログイン中またはログアウト中の場合のみアクセスを許可する
- ユーザーが特定のロールを持っている場合のみアクセスを許可する
- ユーザーが特定の権限を持っている場合のみアクセスを許可する
- 訪問者が許可されたIPから来ている場合のみアクセスを許可する

オペレーション、フィールド、グローバルフィールド、ディレクティブの中から、どのスキーマ要素にアクセスするためにどのルールを満たす必要があるかを指定します。
GraphQLクエリを実行する際、アクセス制御リストで選択されたスキーマ要素のいずれかが含まれている場合、選択したルールが評価されます。
いずれかのルールが満たされない場合、そのオペレーション、フィールド、またはディレクティブへのアクセスは拒否されます。
パブリック/プライベートスキーマモード
アクセス制御によってフィールドまたはディレクティブへのアクセスが拒否された場合、APIの動作方法は2通りあります。
パブリックモード:スキーマのフィールドは公開されており、権限が満たされない場合、ユーザーは権限が拒否された理由の説明を含むエラーメッセージを受け取ります。この動作により、スキーマのメタデータは常に利用可能な状態になります。
プライベートモード:スキーマはユーザーごとにカスタマイズされ、そのユーザーが利用できるフィールドのみが含まれます。そのため、禁止されたフィールドにアクセスしようとすると、エラーメッセージにはそのフィールドが存在しないと表示されます。この動作により、スキーマのメタデータはアクセスできるユーザーにのみ公開されます。

たとえば、パブリックモード では、次のようなレスポンスが返される場合があります。
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}一方、プライベートモード では、次のようなレスポンスが返される場合があります。
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}