我正在开发一个应用程序,管理员可以在其中创建一个客户帐户,然后该帐户只能读取管理员创建的资源。
我的安全规则定义如下:
{
"rules":{
".write":"false",
".read":"false",
"users": {
".write":"false",
".read":"false",
"$userid": {
".write":"false",
".read":"($userid===auth.uid||root.child('clients').hasChild('auth.uid'))"
...
...
}
我希望客户端然后通过myfirebase.firebaseio.com/users/$adminUID/...
其中$adminUID
是管理帐户的用户ID,其中存储了资源。
将新创建的用户ID添加到/users/$adminUID/clients
似乎相当简单,因为firebase SDK会返回您创建的任何新用户的UID。
但我正在使用iOS和OS X,因此我无法为我正在创建的用户传递参数。这使我开始研究如何设置一个小Node js
工作人员来监听新创建的用户,然后设置path
属性(这将是管理员的用户ID)。
但目前我正在努力弄清楚如何实现这一点。
我尝试使用以下命令设置快速节点脚本:
var Firebase = require('firebase');
var ref = new Firebase('https://myfirebase.firebaseio.com/');
ref.child('users/').on('value', function(snapshot) {
console.log(snapshot.val());
});
然后使用node worker.js
运行它,但它不会在日志中返回任何内容。
修改 添加了来自rules.yaml的摘录
access:
- location: /users/$userid/
read: $userid === auth.uid
- location: users/$userid/organisation/info
write: ($userid === auth.uid) && (createOnly() || updateOnly())
- location: users/$userid/slides/
write: ($userid === auth.uid)
- location: users/$userid/general/
write: ($userid === auth.uid)
- location: users/$userid/data
write: ($userid === auth.uid)
- location: /users/$userid
read: root.clients.hasChild('auth.uid')