// An index to track Ada's memberships
{
"users": {
"alovelace": {
"name": "Ada Lovelace",
// Index Ada's groups in her profile
"groups": {
// the value here doesn't matter, just that the key exists
"techpioneers": true,
"womentechmakers": true
}
},
...
},
"groups": {
"techpioneers": {
"name": "Historical Tech Pioneers",
"members": {
"alovelace": true,
"ghopper": true,
"eclarke": true
}
},
...
}
}
每个用户在反向索引中跟踪他/她的组 - 在这种情况下,意味着键保存实际值,而值并不重要。
更新
我不确定如何技术上更新索引,但是经过一番研究我得到了答案:`setValue`可以接受各种变量,而不仅仅是键值对。这意味着更新索引非常简单:只需获取对 `groups/$group_id/members/$member_id` 的引用并将其值设置为 `true`。
现在我的问题有所不同:
假设所有组都是私有的。这意味着用户只能通过邀请加入组 - 当前的组成员必须将另一个用户添加到成员列表中。因此,如果我是ghopper,我想将alovelace添加为成员,我需要更新她的索引,该索引是她的用户对象的一部分 - 这意味着我必须以某种方式知道她的用户ID并且拥有写入她的 groups 字段的访问权限 - 这似乎是一种安全风险。
任何关于如何在尽可能保持访问限制的同时管理此类操作的想法?也许是另一个将用户已知标识符(例如电子邮件)映射到组列表的数据库对象?