4

次のような構造の Firebase データがあります。

+ tasks
  + task_id
    + title
    + user
    + ...
+ users
  + ...

フロントエンドから (AngularJS と AngularFire (および組み込みの SimpleLogin) を使用) - ログインしたユーザーがタスクを作成すると、ユーザーの uid (例: simplelogin:2) が作成中のタスクのユーザー部分に配置されます。

ユーザーがログインすると、次を使用して自分のタスクのみを表示できます。

$firebase( ref.orderByChild('user').equalTo(User.uid) );

次のステップは、私が苦労しているデータを保護することです。私はもう試した:

"tasks": {
   ".indexOn": ["user", "order"],
   ".write": "auth != null",
   ".read": "auth != null && data.child('user').val() == auth.uid",
     "$task": {
        "title": {
           ".validate": "newData.isString() && newData.val().length <= 1000"
        },
        "completed": {
        },
        "time_added": {
            ".validate": "newData.val() <= now"
        },
        "order": {
        },
        "user": {
            ".validate": "newData.val() != null && newData.val() == auth.uid"
        },
        "$other": {
           ".validate": false
        }
     }
  }

また:

"tasks": {
     "$task": {
       ".indexOn": ["user", "order"],
       ".write": "auth != null",
       ".read": "auth != null && data.child('user').val() == auth.uid",

        "title": {
           ".validate": "newData.isString() && newData.val().length <= 1000"
        },
        "completed": {
        },
        "time_added": {
            ".validate": "newData.val() <= now"
        },
        "order": {
        },
        "user": {
            ".validate": "newData.val() != null && newData.val() == auth.uid"
        },
        "$other": {
           ".validate": false
        }
     }
  }

しかし、私は得る:

エラー: permission_denied: クライアントには、目的のデータにアクセスする権限がありません。

どこが間違っていますか?

4

1 に答える 1

4

コレクションには子tasksがありませんuser特定のタスクごとにuser子があります。したがって、読み取りルールを 1 レベル下に移動する必要があります。

"tasks": {
    "$task_id" {
        ".read": "auth != null && data.child('user').val() == auth.uid",
    }

https://www.firebase.com/docs/security/guide/user-security.htmlの例も参照してください。

于 2015-01-26T21:55:46.247 に答える