Looking for how to use this in your app?See Frontend Libraries →
複数ユーザーのデータアクセス
ownersDefinedIn ルールは、owners フィールドを自動的に作成して許可されたレコード所有者を保存することで、ユーザーのセットにレコードへのアクセスを付与します。inField を指定することで、デフォルトの owners フィールド名をオーバーライドして、所有者情報を保存する目的のフィールド名を指定できます。所有者フィールドを更新することで、レコードにアクセスできるユーザーを動的に管理できます。
マルチユーザー認可ルールの追加
ユーザーのセットにレコードへのアクセスを付与したい場合は、ownersDefinedIn ルールを使用します。これにより、許可されたオーナーを保存するための owners: a.string().array() フィールドが自動的に作成されます。
amplify/data/resource.ts
const schema = a.schema({ Todo: a .model({ content: a.string(), owners: a.string().array(), }) .authorization(allow => [allow.ownersDefinedIn('owners')]),});アプリケーションでは、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', });別のユーザーをオーナーとして追加
await client.models.Todo.update( { id: newTodo.id, owners: [...(newTodo.owners as string[]), otherUserId], }, { authMode: "userPool" });オーナーのリストにオーバーライド
inField をオーナーのリストにオーバーライドできます。レコードへのアクセスを持つユーザーの動的なセットが必要な場合は、これを使用します。以下の例では、authors リストはレコード作成時にレコードの作成者によって入力されます。作成者はその後、authors フィールドを追加のユーザーで更新できます。authors フィールドにリストされているユーザーは、レコードにアクセスできます。
const schema = a.schema({ Todo: a .model({ content: a.string(), authors: a.string().array(), // record owner information now stored in "authors" field }) .authorization(allow => [allow.ownersDefinedIn('authors')]),});