3

我有一个关于在某些情况下允许用户信息在用户之间可见的最佳方式的问题。

例如,我的应用程序将有一个“FriendRequest”类来模拟用户之间的好友请求。“FriendRequest”类有两个用户指针,“toUser”和“fromUser”。

我还为所有用户对象设置了默认 ACL,以限制对该用户的访问仅用于读/写。

我的问题是,当用户发送好友请求时,我为每个用户添加指针,并设置“FriendRequest”对象的 ACL 以允许两个用户读取和写入该对象。但是,当用户检索好友请求数据时,查询不会返回“fromUser”数据,因为“fromUser”的 ACL 只允许访问该用户 - 而不是接收好友请求的其他用户。

让这些数据可见的最佳方法是什么?每当创建“FriendRequest”时,我是否应该向“fromUser”ACL 添加读取权限,以便“toUser”能够读取它的信息?

任何帮助表示赞赏!

谢谢

4

1 回答 1

3

好的,让我们设置一些示例数据以使示例问题更清晰。

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 并首先发布了这个。

数据复制选项 这需要临时复制数据,但您只是您需要的特定信息,仅此而已。说你想要nameemail但不是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来描述这些关系(同样,如果这对您来说更安全,请复制相关数据)。

于 2013-09-16T01:30:58.903 回答