firestoreのルールは存在しないレコードに対するクエリにも効く
847 ワード
たとえば、対象となるレコードにclaim
というフィールドがある場合、
そのCustomClaimがないとreadできないというようなルールを書くとする。
allow read :if request.auth.uid != null && ((!resource.data.keys().hasAll(['claim']) || request.auth.token[resource.data.claim] == true))
ここで上記のように書くと、大体のケースではうまくいくのだが、
存在しないレコードに対してクエリを投げると、権限不足でエラーになってしまう。
感覚的にはclaimというカラムがないのだから権限無しでもOKにして欲しいものだが、ruleの仕様上NGである。
対応策
match /hoge/{hogeId} {
allow read :if request.auth.uid != null && !exists(/databases/$(database)/documents/hoge/$(hogeId))
}
match /hoge/{hogeId} {
allow read :if request.auth.uid != null && !exists(/databases/$(database)/documents/hoge/$(hogeId))
}
上記のように、「存在しなければread許可」の条件を足してやればOK。
Author And Source
この問題について(firestoreのルールは存在しないレコードに対するクエリにも効く), 我々は、より多くの情報をここで見つけました https://qiita.com/xx2xyyy/items/422202f4dc185a52a140著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .