RealtimeDatabaseのルール設定においてreadやwriteの設定はカスケード処理されるため、上位の親ノードに対して設定された内容が子をオーバーライドすることは理解しました。
しかし、ではどうやって権限の絞り込みを行うのでしょうか。
例えばチャットアプリを作成するとして、各ユーザーは部屋を建てる事ができ、ログインしているユーザーは自由に部屋に入りメッセージを残すことができる一方、部屋の設定は部屋を立てたユーザーのみが行うとします。
読み出し権限を省略して書くとき
{ "rule"{ "Rooms":{ "$roomID":{ messages:{ ".write":"auth.uid!=null" }, settings:{ ".write":"data.child('roomMaster').val()==auth.uid" } } } } }
のようになると思います。
ここで部屋を削除する機能を作成しようとすると$roomIDにsettingsと同じような書き込み権限を記入する必要がありますが、これは上記カスケード処理を引き起こし、一般ユーザーのメッセージ投稿ができなくなってしまいます。
{ "rule"{ "Rooms":{ "$roomID":{ ".write":"data.child('settings').child('roomMaster').val()==auth.uid" messages:{ ".write":"auth.uid!=null"//無効 }, settings:{ ".write":"data.child('roomMaster').val()==auth.uid" } } } } }
このようなケースでどのような設定を行えばよいのでしょうか。
1.データ構造がまずい
2.そもそもデータ自体を削除せずroomIdListみたいなものを操作するべき
なども検討しましたがいまいち確証がなく困っています。
よろしくお願いします。
あなたの回答
tips
プレビュー