在/rooms/room1
处考虑以下受保护的“会议室”数据结构:
数据:
{
rooms: {
room1: {
content: "hello world",
authorizedUsers: {
"UidOfUserA": true,
"UidOfUserB": true
}
}
}
}
规则:
{
"rules": {
"rooms": {
"$room": {
".read": "data.child('authorizedUsers').hasChild(auth.uid)",
".write": "data.child('authorizedUsers').hasChild(auth.uid)"
}
}
}
}
目前,UserA和UserB可以读取和写入/rooms/room1
的数据。假设UserA能够允许UserB加入,因为UserA知道UserB的UID。
但是,如果UserA想要邀请尚未拥有帐户的人,通过生成URL并将其发送给朋友(不一定是通过电子邮件),则需要扩展此设计。
如何构建规则以实现此目的?
答案 0 :(得分:1)
我能想到的一个可能的解决方案是:
/users/$uid/
处写入自己的私人沙箱(以便他们可以在/users/$uid/activeInviteToken
中设置值)/rooms/$room/
/users/$uid/activeInviteToken
成为/rooms/$room/inviteTokens/
/rooms/room1/inviteTokens/
醇>
工作流程将是:
/rooms/room1/inviteTokens/inviteToken1
添加新密钥(假设为/users/UidOfUserC/activeInviteToken
)/rooms/room1/authorizedUsers/UidOfUserC
=“inviteToken1”/users/$uid/activeInviteToken
,让自己独立于inviteToken 虽然不是绝对必要,但完成步骤4允许用户:
然而,这似乎过于复杂,尤其是在将/rooms/room1/authorizedUsers
添加到var jsonObject = angular.fromJson(yourJsonString)
之前涉及angular.forEach(jsonObject.whatever, function(value, key) {
console.log('key : ', key);
console.log('value : ', value);
});
的两步写入。