Looking for how to use this in your app?See Frontend Libraries →
ユーザー単位/オーナー単位のデータアクセス
owner認可戦略により、レコードへのアクセスが特定のユーザーに制限されます。owner認可が設定されている場合、レコードのownerのみが指定された操作を実行できます。
ユーザー単位/オーナー単位の認可ルールを追加
owner認可戦略を使用して、レコードのアクセスを特定のユーザーに制限できます。owner認可が設定されている場合、レコードのownerのみが指定された操作を実行できます。
amplify/data/resource.ts
// Todoの「オーナー」は、自分のTodoの作成、読み取り、更新、削除が許可されますconst schema = a.schema({ Todo: a .model({ content: a.string(), }) .authorization(allow => [allow.owner()]),});amplify/data/resource.ts
// Todoレコードの「オーナー」は、作成、読み取り、更新のみが許可されます。// Todoレコードの「オーナー」は削除が拒否されます。const schema = a.schema({ Todo: a .model({ content: a.string(), }) .authorization(allow => [allow.owner().to(['create', 'read', 'update'])]),});アプリケーション内では、userPool認証モードを使用して、client.models.<model-name>に対してCRUD操作を実行できます。
import { generateClient } from 'aws-amplify/data';import type { Schema } from '../amplify/data/resource'; // Path to your backend resource definition
const client = generateClient<Schema>();
const { errors, data: newTodo } = await client.models.Todo.create( { content: 'My new todo', }, { authMode: 'userPool', });バックグラウンドで、Amplifyは自動的に各レコードにowner: a.string()フィールドを追加し、レコード作成時にレコードオーナーのアイデンティティ情報が含まれます。
デフォルトでは、Cognitoユーザープールのユーザー情報がownerフィールドに入力されます。保存される値は<sub>::<username>の形式でsubとusernameを含みます。APIは<sub>::<username>の完全な値またはsub/usernameを個別に認可し、usernameを返します。または、OpenID Connectを認可プロバイダーとして設定することもできます。
オーナーフィールドをカスタマイズ
認可ルール内に独自のownerFieldを指定することで、ownerフィールドを独自の好みのフィールドでオーバーライドできます。
const schema = a.schema({ Todo: a .model({ content: a.string(), author: a.string(), // record owner information now stored in "author" field }) .authorization(allow => [allow.ownerDefinedIn('author')]),});