2013-12-15 13 views
5

firebaseのドキュメントの例では、firebaseセキュリティルールの手動アップデートを前提としています。セキュリティルールは、実際のコラボレーションアプリケーションをサポートするためにプログラムでどのように変更できますか?私が検討しているユースケースでは、ユーザーが他のユーザーに選択したデータの共同作業や共有を依頼し、共同作業者へのアクセスを許可/取り消すことができるようにする必要があります。どのようにこれをファイアベースで達成できますか?Firebaseでセキュリティルールをプログラムで変更する方法は?

答えて

8

実際にセキュリティルールをプログラムで変更しないでください。 コードと考える必要があります。展開時にのみ変更してください。

実際に何ができるのかを変更しようとする場合は、Firebaseのデータに依存するセキュリティルールを作成してください。

たとえば、データへのアクセスを特定のグループのユーザーのみに制限したいとします。グループメンバーシップが変更されるたびにセキュリティルールを変更するのではなく、単にFirebaseにグループを保存し、アクセスを許可する前にセキュリティルールで現在のユーザーがそのグループに属しているかどうかを確認するだけです。

".read" : "root.child('groups').child($groupID).child(auth.userid).exists()" 

このように、グループメンバーシップが変更されると、ユーザーは自動的に閲覧が許可されるべきデータへのアクセスが許可されます。

セキュリティルールのより複雑な例については、Firefeedのrules.jsonファイルを参照してください。

+1

迅速な回答ありがとうございます。グループを使用して動的に更新されるユーザーを処理することは意味があります。しかし、動的に追加されたデータセットをどのように処理するのでしょうか?たとえば、ユーザーは/ users/userid/projects/projectidの下にプロジェクトを作成し、その特定のプロジェクトの読取りアクセスを共同作業者のグループに許可したいとします。それはFirebaseでどのように達成されますか? – Jarnal

+1

グループ設定は単なる例でした。あなたはグループを持つ必要はありません - あなたは好きなデータに依存することができます。たとえば、データセット自体に「可読」フラグを付けることができます。これをtrueに設定すると、誰でも読み取り可能になります。または、それはそれを使用することを許可されたユーザーの "読み取り可能な"リストを持つことができます。など... –

+1

@AndrewLee、私はより複雑なケースがあります。私はルーム(ブランチ)を動的に作成しています。部屋の作成時にこれらのアクセス権を指定するにはどうすればよいですか?数百万の異なる部屋があることに注意してください。 –

0

しかし、動的に追加されたデータセットをどのように処理するのですか?

これは、子の$ノードを使用して行います。それは次のようになります。ここでは

は私のデータベースは

users 
- userIDHere 
    - name: John Doe 
    - whatever: who knows 

ですそして、あなたがこれを行うことにより、各ユーザーのルールを設定します:

{ 
    "rules": { 
    "users": { 
     "$user": { 
     // whatever rules you want here, and you can reference $user to get the user's id. 
     } 
    } 
    } 
} 

が、これはあなたが求めていたものであると思います、と希望これは役に立ちます!

関連する問題