我有一个允许用户托管私人聊天的应用。聊天可以是公开的(无需加密密码)或私密(需要密码)。它还具有可以在聊天中发帖的设置(仅限主持人或加入的任何人)。我在考虑有一个"管理员"主持人的角色,"用户"那些可以聊天的人,以及" Spectator"对于那些可以查看但不能聊天的人。如果我将一个主机添加到一个聊天的管理员角色,他/她将成为所有聊天的管理员。如何创建角色,以便在我向其添加用户时,它们只适用于一个聊天(PFObject)?
答案 0 :(得分:0)
我建议创建一个云代码功能来创建聊天,并在其中创建可以添加用户的特定于聊天的角色。通过使用众所周知的格式( - ),您可以非常轻松地查找和管理角色成员资格。在下面的示例中,我创建了聊天和管理员角色,并将当前用户(聊天的创建者)添加为管理员角色的唯一成员(以及唯一可以修改管理员角色的成员)。
N.B。如果您计划使用指向Chat的指针创建Message类,则不会直接阻止用户创建这些对象。您可能需要一些额外的云代码(例如,beforeSave挂钩)来强制执行该操作。
function createChat(name, public) {
var chat = new Parse.Object("Chat");
chat.set("public", public);
chat.set("name", name);
chat.save().then(function() {
var id = chat.id;
// create each role using a well-known format of <chat object id>-<role name>
var adminRole = new Parse.Role();
adminRole.setName(id+"-Admin");
adminRole.relation("users").add(Parse.User.current());
// add the current user (the creator
var adminRoleAcl = new Parse.ACL();
adminRoleAcl.setPublicWriteAccess(false);
adminRoleAcl.setPublicReadAccess(true);
adminRoleAcl.setWriteAccess(Parse.User.current(), true);
adminRole.setACL(adminRoleAcl);
var chatAcl = new Parse.ACL();
chatAcl.setPublicWriteAccess(false);
chatAcl.setPublicReadAccess(public);
chatAcl.setRoleWriteAccess(id+"-Admin", true);
chat.setACL(chatAcl);
return Parse.Object.saveAll([adminRole, chat]);
}).then(function() {
// you'd normally have response.success() here
console.log("done!");
})
}