リレーションシップとスキーマ

■@modelとは?

https://docs.amplify.aws/cli-legacy/graphql-transformer/model/

@model注釈が付けられたオブジェクトタイプは、生成されたAPIの最上位エンティティです。@model注釈が付けられたオブジェクトは、AmazonDynamoDBに保存され、@authを介して保護され、@searchableを介して他のオブジェクトに関連付けられ、@connectionAmazonOpenSearchにストリーミングされます。@versionedディレクティブを適用して 、バージョンフィールドと競合検出をモデルタイプに即座に追加することもできます。

1つの@modelディレクティブで、次のAWSリソースを設定します。

  • デフォルトでPAY_PER_REQUEST課金モードが有効になっているAmazonDynamoDBテーブル。
  • 上記のテーブルにアクセスするように設定されたAWSAppSyncデータソース。
  • AWSAppSyncがお客様に代わって上記のテーブルを呼び出すことを可能にするデータソースにアタッチされたAWSIAMロール。
  • 最大8つのリゾルバー(作成、更新、削除、取得、リスト、onCreate、onUpdate、onDelete)ですが、これは@modelディレクティブのqueries、、、mutationsおよびsubscriptions引数を介して構成できます。
  • ミューテーションを作成、更新、および削除するための入力オブジェクト。
  • リストクエリおよび接続フィールドのオブジェクトをフィルタリングできるようにする入力オブジェクトをフィルタリングします。
  • リストクエリの場合、返されるオブジェクトのデフォルト数は100です。limit引数を設定することで、この動作をオーバーライドできます。

■@auth とは?

https://docs.amplify.aws/cli-legacy/graphql-transformer/auth/

アプリケーションがGraphQLAPIと対話するには、承認が必要です。

APIキーは、パブリックAPI(またはパブリックにしたいスキーマの一部)またはプロトタイピングに最適です。デプロイする前に有効期限を指定する必要があります。

IAM承認では、署名バージョン4を使用して、ロールに関連付けられたポリシーを使用してリクエストを行います。

AmazonCognitoユーザープールまたはサードパーティのOpenIDConnectプロバイダーによって提供されるOIDCトークンも承認に使用できます。これを有効にするだけで、ユーザーがAPIアクションへのトップレベルのアクセスを許可されるように認証する必要がある単純なアクセス制御が提供されます。

これらのトークンの一部として提供された、またはデータベースアイテム自体に設定された認証メタデータを活用するスキーマ上で@authを使用して、よりきめ細かいアクセス制御を設定できます。

@auth注釈が付けられたオブジェクトタイプは、APIの最上位の承認よりも追加の制御を提供する一連の承認ルールによって保護されます。プロジェクトのスキーマのオブジェクトタイプ定義とフィールド定義に、@authディレクティブを使用できます。

@modelアノテーションも付けられたオブジェクトタイプ定義で@authディレクティブ を使用すると、そのタイプのオブジェクトを返すすべてのリゾルバーが保護されます。フィールド定義でディレクティブを使用する @authと、親タイプで見つかった属性に基づいてアクセスを許可するリゾルバーがフィールドに追加されます。

■rules(@auth(rules:〜)

@authディレクティブを使用して、パブリック、サインインユーザー、ユーザーごと、およびユーザーグループごとのデータアクセスの承認ルールを構成します。承認ルールは、デフォルトで拒否の原則に基づいて機能します。

つまり、許可ルールが特に構成されていない場合、それは拒否されます。

上記のAWSでのルールの前提で、以下のコードを改めて見てみる。