3

私はfirebaseを使用しており、ユーザーは次のように設定されています:

{
    "firebase-account-123": {
        "users": {
            "simplelogin:1": {
                "properties"{ "name": "john doe", "email": "user@email.com" }
                "children": {
                    "simplelogin:2":{ "name": "user 2", "email": "user2@email.com" },
                }
            },
            "simplelogin:2": {
                "properties"{ "name": "user 2", "email": "user2@email.com", "disabled": false }
            }
        }
}

アカウントマネージャーがアクセスできる「子」がいます。私はこれが初めてで、私が抱えているいくつかの権限の問題を解決しようとしています。

現在、私のルールでは、ユーザーが自分のデータの読み取り/書き込みのみを許可しています。

".read": "auth.uid == $userid", ".write": "auth.uid == $userid"

「子」オブジェクトにリストされているユーザーのデータを(おそらくプロパティオブジェクトで)読み書きできるようにする方法を知っている人はいますか?

4

2 に答える 2

4

バケットの下にリストされているユーザー ID にchildrenもデータの読み取りと書き込みを許可する場合hasChild()は、セキュリティ ルールでメソッドを使用してみてください。

たとえば、上で概説したのと同じデータ構造を使用すると、次のようになります。

{
  "rules": {
    ".read": false,
    ".write": false,
    "users": {
      "$userid": {
        ".read": "auth.uid == $userid",
        ".write": "auth.uid == $userid",
        "properties": {
          ".read": "root.child('users').child(auth.uid).child('children').hasChild($userid)"
        }
      }
    }
  }
}
于 2014-11-13T20:41:29.383 に答える
3

このような何かがうまくいくはずです:

".read": "auth.uid == $userid || root.child('users/'+auth.uid+'/children/'+$userid).exists()"

したがって、これは次の場合にノードへのアクセスを許可します。

  • 現在ログオンしているユーザー自身のノードです
  • 現在ログオンしているユーザーには、ノードの ID を持つ子ノードがあります

子の重複データを削除するために、データ構造を少しクリーンアップすることをお勧めします。

{
    "firebase-account-123": {
        "users": {
            "simplelogin:1": {
                "properties"{ "name": "john doe", "email": "user@email.com" }
                "children": {
                    "simplelogin:2": true
                }
            },
            "simplelogin:2": {
                "properties"{ "name": "user 2", "email": "user2@email.com", "disabled": false }
            }
        }
}
于 2014-11-13T20:38:40.597 に答える