单个对象的用户角色 - Parse

时间:2014-05-07 14:46:07

标签: parse-platform acl user-roles

我有一个允许用户托管私人聊天的应用。聊天可以是公开的(无需加密密码)或私密(需要密码)。它还具有可以在聊天中发帖的设置(仅限主持人或加入的任何人)。我在考虑有一个"管理员"主持人的角色,"用户"那些可以聊天的人,以及" Spectator"对于那些可以查看但不能聊天的人。如果我将一个主机添加到一个聊天的管理员角色,他/她将成为所有聊天的管理员。如何创建角色,以便在我向其添加用户时,它们只适用于一个聊天(PFObject)?

1 个答案:

答案 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!");
    })
}