2013-09-23 47 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的文檔說這是 user - 正在發出請求的Parse.User。如果沒有登錄用戶,這不會被設置。 我正在嘗試添加用戶,當我們註冊時,所以用戶沒有登錄,因此爲空。所以我認爲這隻能通過調用另一個雲端功能來完成,這在登錄後會這樣做 –

+1

誰在保存「賬戶」對象?用戶保存將在雲代碼中顯示爲'request.user'。 –

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); 
         } 
        }); 
    }); 
    
相關問題