exists 存在やアクセスするためのパスを確認した後ゲットを行うと良い
debug(exists(/databases/$(database)/documents/users/XXXXXXXXXXXXXXXXXXXXXXXXXX))
↓ bool_value: true となった場合 このパスの位置にドキュメントがあることがわかるので get() に切り替えます
debug(get(/databases/$(database)/documents/users/XXXXXXXXXXXXXXXXXXXXXXXXXX))
↓ $(変数) で変数展開できます。現在ログイン中の uid はこちら
debug(get(/databases/$(database)/documents/users/$(request.auth.uid)))
Firestore セキュリティルールで使える関数一覧 - Qiita
CloudFirestoreのセキュリティルールの構造化 | Firebase
debug() で囲むとエミュレーターを使ったときに firestore-debug.log に
string_value: "hogehoge"
のような形でデバッグが表示されます(stringの場合)
debug(['a','b'])
↓ firestore-debug.log に次のように書き出されます
list_value {
values {
string_value: "a"
}
values {
string_value: "b"
}
}
debug(request.path)
↓ firestore-debug.log に次のように書き出されます
path_value {
segments {
simple: "databases"
}
segments {
simple: "(default)"
}
segments {
simple: "documents"
}
segments {
simple: "users"
}
segments {
simple: "xxxxxxxxxxxxxxxxYYYYYYYYYYYYZZZZZZZZZZ"
}
segments {
simple: "news"
}
}
単一リソースのワイルドカード
match /posts/{post}
これは posts 以下のすべてのドキュメントにマッチしますが、 posts 以下にコメントなどがネストされている場合は、コメントのサブコレクションにはマッチしません。
match /posts/{document=**}
これだと posts 以下なんでもマッチします。 引用 : posts