【问题标题】:User roles for individual objects - Parse单个对象的用户角色 - 解析
【发布时间】:2014-06-24 14:56:08
【问题描述】:
我有一个允许用户主持私人聊天的应用程序。聊天可以是公开的(无需密码即可加入)或私人的(需要密码)。它还具有谁可以在聊天中发帖的设置(仅限主持人或任何加入的人)。我正在考虑为主持人设置“管理员”角色,为可以聊天的人设置“用户”角色,为可以查看但不能聊天的人设置“观众”。如果我为一个聊天添加一个主持人到管理员角色,他/她将成为所有聊天的管理员。如何创建角色,以便在我向其中添加用户时,它们将仅适用于一个聊天(PFObject)?
【问题讨论】:
标签:
parse-platform
acl
user-roles
【解决方案1】:
我建议创建一个云代码函数来创建聊天,并在其中创建可以添加用户的聊天特定角色。通过使用众所周知的格式 (-),您可以非常轻松地查找和管理角色成员资格。在下面的示例中,我创建了 Chat 和 admin 角色,并将当前用户(聊天的创建者)添加为 admin 角色的唯一成员(以及唯一可以修改 admin 角色的成员)。
注意如果您计划使用指向 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!");
})
}