2013-09-23 2 views
1

У меня есть код облака, который создает две роли учетной записи при регистрации пользователя. Ниже приведен методParse.com, Добавление пользователей к созданным ролям

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

ответ

2

На самом деле вы можете получить доступ к пользователю, который выполняет запрос, проверьте Cloud Code Documentation для более подробной информации.

В частности, то, что вы хотите посмотреть на request.user:

var currentUser = request.user; 
+0

Спасибо за ответ. Документация для request.user говорит об этом пользователь - The Parse.User, который делает запрос. Это не будет установлено, если не было зарегистрированного пользователя. Я пытаюсь добавить пользователей, когда мы регистрируемся, поэтому пользователь не входит в систему и, следовательно, имеет значение NULL. Поэтому я думаю, что это можно сделать только путем вызова другой облачной функции, которая делает это после входа в систему –

+1

Кто сохраняет объект «учетная запись»? Пользователь, сохраняющий это, будет отображаться как «request.user» в Cloud Code. –

4

спасибо за помощь. Я делаю это, используя код облака, как это

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