Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

firestoreのルールは存在しないレコードに対するクエリにも効く

More than 1 year has passed since last update.

たとえば、対象となるレコードに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))
    }

上記のように、「存在しなければread許可」の条件を足してやればOK。

xx2xyyy
技術チーム新設に伴い、新人CTOになりました。 日々修行中です。
english-bootcamp
2日20時間の超短期集中英会話スクールを運営。Webやアプリへの展開も計画中です。
https://english-bootcamp.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away