【Hasura Docs翻訳】アクセスコントロールの基礎

Hasura公式ドキュメントを翻訳しました Access control basics

前書き

Hasuraのアクセスコントロールの基礎を理解するために、SQLクエリとの共通点を見てみましょう:

https://hasura.io/docs/1.0/_images/permissions-rule-analogy1.png

このクエリは、既存のテーブルの行と列の要求を定義することにより、正しい結果を返します。Hasuraのルールベースのアクセスコントロールも同様に動きます。Role, Table, Action(insert, update, select and delete)の組み合わせに対して以下の権限を定義します。

行レベルの権限

この権限に基づいて、テーブルの行の一部のアクセスを制限します。行レベルの権限は、基本的にブール式であり、任意の行を評価した時にアクセスが可能かどうか決定されます。これらの権限は、ブール式を作成するために列やセッション変数、静的な値から構成されます。

列レベルの権限

上記に基づいてアクセス可能な行については、この権限ルールに基づいて列の一部を制限します。

詳しくは

全ての構成オプションについては、アクセス許可ルールの構成を参照ください。

簡単な例を使用して、アクセスコントロールをみてみましょう

テーブルを作成する

コンソール画面に行き、次のスキーマにしたがってauthorというテーブルを作成します。

author (
  id INT PRIMARY KEY,
  name TEXT
)

次に、authorテーブルのInsert Rowタブを使用してサンプルデータを挿入していきます。

アクセス制御なしでクエリを実行する

コンソール画面のGraphQLタブに移動し、次のクエリを実行しください。

query {
  author {
    id
    name
  }
}

デフォルトのGraphQLクエリは管理者権限で実行されるため、全ての著者を含んだレスポンスを受け取ることがわかります。

https://hasura.io/docs/1.0/_images/fetch-authors1.png

アクセス制御ルールを定義する

次に、authorテーブルにusersに対するアクセスコントロールのルールを定義しましょう。テーブルの権限タブに移動し(Data –> table –> Permissions tab)、以下に示すように権限を定義してください:

https://hasura.io/docs/1.0/_images/permission-basics-simple-example1.png

この権限のルールは「userauthorテーブル、select/query操作に対して、id列がセッション値のX-Hasura-User-IDと同じ値である行へのアクセスを許可する」と読みます。

アクセス制御を使用してクエリを実行する

上記と同じクエリを実行してみましょう。ただし、役割とユーザー情報を示すためにX-Hasura-RoleX-Hasura-User-IDセッション変数も含まれています。これらのセッション変数は、以下で強調表示されているGraphiQLのRequest Headersセクションに渡されます:

https://hasura.io/docs/1.0/_images/permission-basics-query-with-access-control1.png

ご覧の通り、結果はuserに対するアクセスコントロールのルールに基づきフィルターされています(セッション変数のX-Hasura-Roleによって役割が示されています)。そして、結果はid行が(セッション変数のX-Hasura-User-IDによって示されている)1の値である行に絞られています。

ドキュメントの認証と認可の概要のセクションで説明されているように、認証トークンをこれらのセッション変数に解決するには、認証サービスが必要です。詳細については、 リファレンス-セッション変数を参照してください。

次のステップ

役割とセッション変数の記事を読む: 役割とセッション変数

より詳細な例を参照する:一般的なアクセス制御の例