つの重要なフィールドがあります。オブジェクトは、アクセスを必要とするユーザーです。オブジェクトは、オペレーションが成功すると書き込まれるドキュメントです。読み取りリクエストには存在しません。作成の最初の条件は次のようになります。つの必須フィールドが含まれている場合にのみ作成できます。フィールドを指定しません。これは、ドキュメントの作成を試みる前にアプリがそれを追加することを強制します)。これらのキーがすべて含まれていることを確認できます。文字以下であることです。最初のルールは次のようになります。}}ターミナルでテストを再実行し、最初のテストに合格することを確認します。ブログ投稿の下書きを更新します。次に、投稿者がブログ投稿の下書きを推敲し、下書きのドキュメントを編集します。投稿を更新できる条件に関するルールを作成します。第一に、下書きを更新できるのは作成者のみであることです。createdAt)を変更しないことです。文字以内にする必要があります。50;完全なルールは次のようになります。}}テストを再実行し、別のテストが合格することを確認します。下書きを作成、更新できるのと同様に、下書きを削除することもできます。属性を持つ作成者は、下書きを削除できます。trueユーザー属性に基づいて権限を付与することを、属性ベースのアクセス制御(ABAC)といいます。true読み取りにも同じ条件が適用されるため、ルールに権限を追加できます。きめ細かい権限を使用できます。完全なルールは次のとおりです。}}テストを再実行し、別のテストが合格したことを確認します。パターンに合わせて非正規化。コレクションに分割します。公開された投稿は誰でも読むことはできますが、強制的に削除することはできません。下書きは削除できますが、投稿者とモデレーターだけが読むことができます。このアプリでは、ユーザーがブログ投稿の下書きを公開すると、公開された新しい投稿を作成する関数がトリガーされます。次に、公開済みの投稿に関するルールを記述します。シンプルなルールは、公開済みの投稿は誰でも読むことができるが、誰も作成または削除できないというものです。以下のルールを追加します。false;}ルールが指定されていない場合、デフォルトでアクセスは拒否されます。ルールは、デベロッパーにとって明確になりますが、動作は変更されません。ルールの他の場所に重複するルールがないことを確認することも重要です。いずれかのルールでアクセス権が付与されている場合、アクセス権が付与されます。ステートメントからドキュメントを「除外」することはできません。これらを既存のルールに追加すると、ルールファイル全体は次のようになります。}}テストを再実行し、別のテストに合格することを確認します。公開済みの投稿を更新するための条件は次のとおりです。投稿者またはモデレーターのみが行えます。すべての必須フィールドが含まれている必要があります。あなたはすでに作成者またはモデレーターとなる条件を書いたので、条件をコピーして貼り付けることもできますが、時間が経つと、読みづらくなり、維持するのが難しくなる可能性があります。代わりに、作成者またはモデレーターであるためのロジックをカプセル化するカスタム関数を作成します。その後、複数の条件から呼び出します。いう新しい関数を作成します。オブジェクトを引数として受け取ります。文で終わる必要があります。示すブール値を返します。isModerator;}関数を呼び出す次に、この関数を呼び出すようドラフトのルールを更新します。渡すように注意してください。}これで、新しい関数も使用する、公開済み投稿を更新する条件を記述できます。request.auth);検証を追加する公開済みの投稿の一部フィールドは変更できません。各フィールドは変更不可です。つのフィールド(title、content、visible)は、更新後も存在する必要があります。公開済みの投稿の更新に次の要件を適用する条件を追加します。文字未満であるという条件を追加します。作成することで実現できます。新しい関数では、公開された投稿を更新するための条件は次のようになります。titleIsUnder50Chars(request.resource.data);完全なルールファイルは次のとおりです。}}テストを再実行します。件のテストが不合格になっているはずです。公開された投稿ではコメントが許可され、コメントは公開された投稿のサブコレクション(/published/{postID}/comments/{commentID})に保存されます。デフォルトでは、コレクションのルールはサブコレクションに適用されません。公開された投稿の親ドキュメントに適用されるルールと同じルールをコメントにも適用したくない。別のものを作成します。サブコレクションはデフォルトで親ドキュメントのルールを継承しないため、異なるアクセス権が必要なドキュメントの部分を分離する場合に適しています。ステートメントを記述します。匿名にできないこのアプリでは、コメントを読むことができるのは、匿名アカウントではなく、永続的なアカウントを作成したユーザーのみです。つのテストに合格することを確認します。つの条件を満たす必要があります。文字未満にする必要があります。コレクションに保存される禁止ユーザーのリストには追加できません。条件を逆にすることで、ドキュメントが存在しないかどうか(!exists())を確認すると、読みやすくなるかもしれません。trueコメントを作成する最後のルールは次のとおりです。!(exists(/databases/$(database)/documents/bannedUsers/$(request.auth.uid));ルールファイル全体は次のようになります。つのテストに合格することを確認します。時間、コメントを編集できます。タイムスタンプを使用します。ユーザーが作成者であることを確認します。時間以内に作成されていることを確認します。演算子と組み合わせると、コメントを更新するルールは次のようになります。つのテストに合格することを確認します。親の所有権の確認コメントは、コメントの投稿者、モデレーター、または投稿者が削除できます。フィールドをチェックするため、このヘルパー関数を再利用してユーザーが作成者かモデレーターかを確認できます。