Parse platform Parse.com,将用户添加到已创建的角色

Parse platform Parse.com,将用户添加到已创建的角色,parse-platform,role,user-roles,Parse Platform,Role,User Roles,我有一个云代码,在用户注册时创建两个帐户角色。下面是方法 Parse.Cloud.afterSave("account", function(request) { var accountName = request.object.get("name"); //create admin role var adminRoleACL = new Parse.ACL(); adminRoleACL.setPublicWriteAccess(true); var

我有一个云代码,在用户注册时创建两个帐户角色。下面是方法

Parse.Cloud.afterSave("account", function(request) {
    var accountName = request.object.get("name");

    //create admin role
    var adminRoleACL = new Parse.ACL();
    adminRoleACL.setPublicWriteAccess(true);
    var adminRole = new Parse.Role(accountName + "_Administrator", adminRoleACL);
    adminRole.save() ; 

    //create user role
    var userRoleACL = new Parse.ACL();
    userRoleACL.setPublicWriteAccess(true);
    var userRole = new Parse.Role(accountName + "_User", userRoleACL);
    userRole.save();
});
现在我想要实现的是添加刚刚注册这两个角色的用户。但不幸的是,在云代码中,我无法获取当前用户。 因此,我所做的是在从客户端创建角色之后在角色中添加用户。下面是相同的代码。代码执行得很好,我没有看到任何错误,但是我没有看到用户被添加到数据浏览器中的角色。知道为什么会这样吗?我错过了什么吗。我真的非常感谢你的帮助

user.signUp(null, {
    success : function(user) {
        var currentUser = Parse.User.current();

        var accountName = account.get("name");

        var query = new Parse.Query(Parse.Role);
        query.contains("name", accountName);

        query.find({
            success : function(roles) {
                if (!roles) {
                    alert("No roles for " + accountName + " were found");
                } else {
                    for (var i = 0; i < roles.length; i++) {
                        //add the user for admin role
                        //TODO: this needs to be done only once for the account owner
                        if (roles[i].get("name").search(USER_TYPE.ADMIN) >= 0) {
                            roles[i].getUsers().add(currentUser);
                        }

                        //add the user for user role
                        if (roles[i].get("name").search(USER_TYPE.USER) >= 0) {
                            roles[i].getUsers().add(currentUser);
                        }
                        var saved = roles[i].save();
                    }
                    alert("User was added into roles");
                }
            },
            error : function(error) {
                alert("Could not add users to the account " + accountName + " error: " + error.message);
            }
        });

        alert("User created successfully");
    },
    error : function(user, error) {
        alert("Error: " + error.code + " " + error.message);
    }
});
user.signUp(空{
成功:功能(用户){
var currentUser=Parse.User.current();
var accountName=account.get(“名称”);
var query=newparse.query(Parse.Role);
查询.包含(“名称”,accountName);
查询.查找({
成功:职能(角色){
如果(!角色){
警报(“未找到“+accountName+”的角色”);
}否则{
对于(变量i=0;i=0){
角色[i].getUsers().add(当前用户);
}
//为用户角色添加用户
if(角色[i].get(“name”).search(用户类型.USER)>=0){
角色[i].getUsers().add(当前用户);
}
var saved=角色[i].save();
}
警报(“用户已添加到角色中”);
}
},
错误:函数(错误){
警报(“无法将用户添加到帐户”+accountName+“错误:+error.message”);
}
});
警报(“用户创建成功”);
},
错误:函数(用户,错误){
警报(“错误:+Error.code+”“+Error.message”);
}
});

实际上,您可以访问执行请求的用户,有关详细信息,请查看

特别是,您要查看的是
请求。user

var currentUser = request.user;

谢谢你的帮助。我使用这样的云代码来完成它

  • 创建帐户时创建角色

    Parse.Cloud.afterSave("account", function(request) {
    
        var accountName = request.object.get("name");
        //create admin role
        var adminRoleACL = new Parse.ACL();
        adminRoleACL.setPublicReadAccess(false);
        adminRoleACL.setPublicWriteAccess(false);
        var adminRole = new Parse.Role(accountName + "_Administrator", adminRoleACL);
        adminRole.save();
    
        //create user role
        var userRoleACL = new Parse.ACL();
        userRoleACL.setPublicReadAccess(false);
        userRoleACL.setPublicWriteAccess(false);
        var userRole = new Parse.Role(accountName + "_User", userRoleACL);
        userRole.save();
    });
    
  • 然后将用户添加到创建的角色中

    Parse.Cloud.define("addUsersToRole", function(request, response) {
    
        Parse.Cloud.useMasterKey();
        var currentUser = request.user;
        var accountName = request.params.accountname;
        var isAdmin = request.params.admin;
    
        var query = new Parse.Query(Parse.Role);
        query.contains("name", accountName);
        query.find({
            success : function(roles) {
                console.log("roles: " + roles.length);
                for (var i = 0; i < roles.length; i++) {
    
                    if ( isAdmin = false && roles[i].get("name").search("_Administrator") >= 0)
                        continue;
    
                    roles[i].getUsers().add(currentUser);
                    roles[i].save();
                }
                response.success();
            },
            error : function(error) {
                response.error("error adding to admin role " + error);
            }
        });
    });
    
    Parse.Cloud.define(“addUsersToRole”),函数(请求、响应){
    Parse.Cloud.useMasterKey();
    var currentUser=request.user;
    var accountName=request.params.accountName;
    var isAdmin=request.params.admin;
    var query=newparse.query(Parse.Role);
    查询.包含(“名称”,accountName);
    查询.查找({
    成功:职能(角色){
    log(“角色:+roles.length”);
    对于(变量i=0;i=0)
    继续;
    角色[i].getUsers().add(当前用户);
    角色[i].save();
    }
    回答:success();
    },
    错误:函数(错误){
    错误(“添加到管理员角色时出错”+错误);
    }
    });
    });
    

  • 谢谢你的回复。request.user的文档称此用户为发出请求的Parse.user。如果没有登录的用户,则不会设置此选项。我试图在注册时添加用户,因此用户未登录,因此为空。因此,我认为这只能通过调用另一个云函数来实现,该函数在登录后执行此操作。谁在保存“account”对象?将作为
    请求公开的用户保存。用户
    在云代码中。