ios - 只允许 2 个用户从公共(public)类读取一个对象

标签 ios xcode parse-platform

我正在 2 个用户之间建立私有(private)聊天。目前,我已将“聊天”类开放给所有人(读/写),所有消息(对象)都将发送到这里。

我正在考虑添加只允许在两个用户之间读取的对象,这样只有他们才能看到他们聊天的内容。

我正在使用以下方式获取消息:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

PFQuery *fquery = [PFUser query]; // query to get the chat partener
[fquery whereKey:@"objectId" equalTo:[[NSUserDefaults standardUserDefaults] stringForKey:@"friendid"]];
PFUser *friend = (PFUser *)[fquery getFirstObject];    // got it!

PFQuery *query = [PFQuery queryWithClassName:@"Chat"]; // new query for grabbing messages
[query whereKey:PF_CHAT_ROOM equalTo:chatroom]; // @"Chat" = @"Chat"
if (message_last != nil) [query whereKey:PF_CHAT_CREATEDAT greaterThan:message_last.date]; 
[query includeKey:PF_CHAT_USER]; // current user
[query includeKey:[NSString stringWithFormat:@"%@", friend]]; // its friend/partener
[query orderByAscending:PF_CHAT_CREATEDAT]; // sort by date
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
// adding the messages to an array;
 }];

用于编写要解析的消息:

PFObject *object = [PFObject objectWithClassName:@"Chat"]; // class name
object[PF_CHAT_ROOM] = chatroom; 
object[PF_CHAT_USER] = [PFUser currentUser];
object[PF_CHAT_TEXT] = text;

PFQuery *query = [PFUser query];
[query whereKey:@"objectId" equalTo:[[NSUserDefaults standardUserDefaults] stringForKey:@"friendid"]];
PFUser *friend = (PFUser *)[query getFirstObject];  // query to get the chat partener

PFACL *roleACL = [PFACL ACL];
[roleACL setReadAccess:YES forUser:[PFUser currentUser]];
[roleACL setReadAccess:YES forUser:friend];  // setting read permission for those guys

object.ACL = roleACL;
[object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
{ 
    ....
}]; 

这是正确的方法吗?

最佳答案

我已经实现了一个类似的应用程序,采用了似乎有效的相同方法。但我认为你已经把它需要的复杂化了。

你需要一个你似乎拥有的聊天类。这可能类似于:

Chat
Object ID, Message, Author, Date, Date Seen, ACL, etc.... 
(there's many good schemas out there just google it) 

然后,当您为 friend 创建新的聊天消息时,您只需创建一个新的 PFObject,将其他用户的 ACL 权限设置为喜欢您已正确完成。

用户可以通过调用来阅读他的消息

PFQuery *query = [PFQuery queryWithClassName:@"Chat"]; 

查询的响应只会是用户具有读取权限的聊天,而不是所有人。因此,除非您要查找未读消息等,否则无需指定任何进一步的查询参数。

关于ios - 只允许 2 个用户从公共(public)类读取一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24674960/

相关文章:

ios - 仅在指定部分启用 UITableView 编辑

ios - 如何防止 ScrollView 让用户(暂时)将 UIScrollView 滚动出其内容区域?

ios - 当应用程序恢复时注销后快速解析应用程序崩溃

ios - 在 Parse 中更新用户电子邮件

ios - 为什么 Xcode 不会将一些工件作为文件夹上下文提交的一部分提交?

iOS 8 键盘扩展仅在 iPhone 5 和 5s 上加载

javascript - 在移动设备上禁用输入自动缩放

php - 将图片从 iOS 应用程序发送到 php 脚本到 mySQL DB

iphone - 如何将介绍影片添加到我的应用程序?

Android服务在推送通知发送时启动并在服务任务完成后停止