解析 - 使用用户ACL共享用户信息

时间:2013-09-15 23:17:28

标签: parse-platform

我对在某些情况下用户之间可以看到用户信息的最佳方式提出了疑问。

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

我还为所有用户对象设置了一个默认ACL,以限制只有读/写的用户访问权限。

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

允许此数据显示的最佳方法是什么?每当创建“FriendRequest”时,我是否应该为“toUser”的“fromUser”ACL添加读取权限以便能够读取它的信息?

感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:2)

确定设置一些示例数据以使示例问题更清晰。

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。然后,当您接受或拒绝好友请求时,或者可能在一段时间后,您需要从ACL中删除Jane。

当Jane需要从Bob请求数据时,这很简单,因为她可以从他的用户类中提取数据,但是稍后需要更多管理(确保以后正确重置ACL,使用计划任务确保所有朋友请求在2周后没有得到解决#34;休息&#34;最后,如果有某种原因你要保护所有用户类以便它们是只读的,那么暂时使所有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来描述这些关系(同样,如果这使得事情更安全,则复制相关数据)为你)。