【问题标题】:Parse.com, Adding users to created rolesParse.com,将用户添加到创建的角色
【发布时间】:2013-09-29 00:12:09
【问题描述】:

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

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);
    }
});

【问题讨论】:

    标签: parse-platform role user-roles


    【解决方案1】:

    实际上您可以访问正在执行请求的用户,请查看Cloud Code Documentation了解更多详细信息。

    特别想看request.user

    var currentUser = request.user;
    

    【讨论】:

    • 感谢您的回复。 request.user 的文档说这个用户 - 发出请求的 Parse.User 。如果没有登录用户,则不会设置。我试图在我们注册时添加用户,所以用户没有登录,因此为空。所以我认为这只能通过在登录后调用另一个云函数来完成
    • 谁在保存“帐户”对象?保存的用户将在 Cloud Code 中显示为 request.user
    【解决方案2】:

    感谢您的帮助。我通过使用这样的云代码来完成它

    1. 在创建帐户时创建角色。

      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();
      });
      
    2. 然后将用户添加到创建的角色中

      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);
              }
          });
      });
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2014-03-11
      • 2010-09-24
      • 2021-03-13
      • 1970-01-01
      • 2014-11-02
      • 2013-10-06
      相关资源
      最近更新 更多