我正在尝试创建一个安全规则,允许组中的任何用户读取同一组中任何其他用户的信息。换句话说,用户应该能够读取属于公共组的任何用户的用户信息。
这就是我所拥有的:
{
"rules": {
"users": {
"$user_id": {
// Any user beloging to at least one group in common should be able to read
".read": "$user_id === auth.uid || root.child('users/' + $user_id + '/groups').hasAny(root.child('users/' + auth.uid + '/groups'))",
".write": "$user_id === auth.uid",
"groups": {
"$group_id": {
".validate": "root.child('groups/' + $group_id).exists() && newData.isBoolean()"
}
}
}
},
"groups": {
"$group_id": {
"name": { ".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 50" }
}
},
"members": {
"$group_id": {
".read": "root.child('members/' + $group_id + '/' + auth.uid).exists()",
".validate": "root.child('groups/' + $group_id).exists()",
"$user_id": {
".write": true, // Skipped for brevity
".validate": "root.child('users/' + $user_id).exists() && newData.isBoolean()"
}
}
},
}
}
}
当然,hasAny
函数不是API的一部分。有没有办法用现有的API做到这一点?有没有计划添加这样的东西?
答案 0 :(得分:0)
维护用户的好友列表。
您必须继续引用用户的好友列表。当用户加入群组时,请将群组成员的auth.uid
添加到用户的friends
列表中。然后,只有他的朋友可以阅读他的个人资料。
{"rules":{
// $user_id == current user's auth.uid
// $friend_id == his friend's auth.uid
// $member_id == group member's auth.uid
"users":{"$user_id":{
"friends":{"$friend_id":{
}},
// readable by my friends:
".read":"auth =! null && data.child('friends').hasChild(auth.uid)"
}},
"groups":{"$group_id":{
"members":{"$member_id":{
}}
}}
}}
答案 1 :(得分:0)
维护多个配置文件。
以下答案为用户加入的每个组创建多个配置文件副本/视图。就像多个简历一样,您将自己的自我发送给不同的公司。因此,根据您发送给他们的简历,公司成员可能会对您有所了解。
每个用户的个人资料只能查看指定群组的成员。
当观看者
auth.uid
是barney
群组的成员时,观看者可以查看在其帐户中写有profile/barney
的所有用户。
{"rules":{
// $user_id == current user's auth.uid
// $friend_id == his friend's auth.uid
// $member_id == group member's auth.uid
"users":{"$user_id":{
"profile":{"$group_id":{
// readable by group members:
".read":"auth =! null && root.child('groups').child($group_id).child('members').hasChild(auth.uid)"
}}
}},
"groups":{"$group_id":{
"members":{"$member_id":{
}}
}}
}}