0

ここでは、angularFire を使用してデータを取得しています。

angular.module('FireApp', ['firebase'])
  .controller('Document', function($scope, $routeParams, angularFire){
    var url = "https://my-account.firebaseio.com/test" + "/" + $routeParams.data;
    angularFire(url, $scope, data);
});

問題は、これが ' https://my-account.firebaseio.com/test/data ' とそのすべての子と孫などをロードすることです
. '/data' はオブジェクトの配列です。する必要はありません-文字列の配列である可能性が非常に高いです) "/data" の親に似ています:

data: ["0" : {
    "data" : [...],
    "meta" : {
      "active" : false
    },
    "sign" : [...]
  },
  "1" : {
    "data" : [...],
    "meta" : {
      "active" : true
    },
    "sign" : {...}
  },
  "2" : {
    "data" : [...],
    "meta" : {
      "active" : false
    },
    "sign" : {...}
  }]

基本的に、認証されていないすべての angularFire クライアントに、ブール値フラグ meta.active = true のデータ配列の要素のみを受信させたいと考えています。つまり、アクティブ フラグを決定する必要がありますが、その祖父母は angularFire リクエストでクライアントに送信されます。また、認証されていないクライアントは、データの書き込み/編集ができません。私が設定したいルールは、「「active = false」フラグが設定されているときはいつでも、クライアントが認証されていない限り、フラグの祖父母を angularFire クライアントに送信しないでください。」. そうです、ルールは絶対的ではなく相対的なものである必要があります。
認証されたクライアントのみがすべてのデータを受信/編集できる必要があります。
Firebase Simple Login とセキュリティ ルールでそのようなルールを作成できますか?
祖父母に対してこれができない場合は、「アクティブ」フラグを 1 レベル上に移動して、代わりにその親に影響を与えることができます。
時間をありがとう、
ジャレッド

4

1 に答える 1

1

Firebase でこれを実現するには、データを再構築する必要があります。これに関する背景については、このブログ投稿を参照してください: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

データを構造化する 1 つの方法は、アクティブなアイテム用と非アクティブなアイテム用の 2 つの個別のリストを作成することです。項目がアクティブまたは非アクティブになったら、必ず 1 つのリストから削除し、別のリストに追加してください。

{
  "active": {
    0: {
      "data": {...},
      "sign": {...}
    }
  },
  "inactive": {
    0: {
      "data": {...},
      "sign": {...}
    }
  }
}

セキュリティ ルールでは、認証されていないユーザーが非アクティブなアイテムにアクセスできないようにするだけです。

{
  "rules": {
    "active": {
      ".read": true
    },
    "inactive": {
      ".read": "auth != null"
    }
  }
}

お役に立てれば!

于 2013-08-21T17:11:44.720 に答える