好的,让我们设置一些示例数据以使示例问题更清晰。
在Users
表中:
{objectId:"BBBB", name:"Bob", age:18, email:"bob@email.com", ACL: only Bob Read/Write}
{objectId:"JJJJ", name:"Jane", age:27, email:"jane@email.com", ACL: only Jane Read/Write}
于是 Bob 向 Jane 发送了一个好友请求。您在类中创建一个新对象FriendRequest
。
{objectId:"XXXX", fromUser: <ptr to BBBB>, toUser: <ptr to JJJJ>, ACL: Bob and Jane Read/Write}
在您当前的设置中,因为您已经设置了 ACL,因此其他人无法读取它们。
选项1
正如您所建议的,当 Bob 向 Jane 发出请求时,由于它是从 Bob 登录的设备发起的,因此他可以将 Jane 添加到 ACL。然后,您需要在 Jane 接受或拒绝好友请求时,或者在一定时间后,将 Jane 从 ACL 中删除。
当 Jane 需要向 Bob 请求数据时,这很简单,因为她可以从他的用户类中提取数据,但是稍后需要更多管理(确保稍后正确重置 ACL,使用计划任务来确保所有朋友请求不两周后解决的是“休息”,最后,如果出于某种原因您要保护所有用户类以便它们是只读的,那么暂时使 Bob 的所有属性对 Jane 可读可能是一件坏事。
懒惰的选择
你可以让所有用户都阅读。显然更不安全,我想你想避免这种情况,因为你使用 ACL 并首先发布了这个。
数据复制选项
这需要临时复制数据,但您只是您需要的特定信息,仅此而已。说你想要name
,email
但不是age
来自用户。
{objectId:"XXXX",
fromUser: <ptr to BBBB>,
fromUserName: 'Bob'
fromuserEmail: 'bob@email.com'
toUser: <ptr to JJJJ>,
ACL: Bob and Jane Read/Write}
所以当 Bob 创建请求时,他会将自己的信息放入请求对象中。简可以阅读此信息。一旦请求完成,您可以让 Jane 可以读取 Bob 的数据,或者您可能有一些其他表FriendRelations
来描述这些关系(同样,如果这对您来说更安全,请复制相关数据)。