2016-08-04 31 views
0

我試圖爲我的應用設置「general_user」角色,以便管理員可以通過從用戶角色中刪除用戶來禁止用戶。parse-server在afterSave中爲用戶和角色設置ACL

此代碼:

Parse.Cloud.afterSave(Parse.User, function(request, response) { 
var user = request.object; 
if (user.existed()) { return; } 

var roleQuery = new Parse.Query(CONSTANTS.ROLE_CLASSNAME); 
roleQuery.equalTo("name", CONSTANTS.GENERAL_USER_ROLENAME); 
roleQuery.first(CONSTANTS.USE_MASTER_KEY) 
    .then(function(generalUserRole) { 
     if(generalUserRole) 
     { 
      generalUserRole.getUsers().add(user); 
      return generalUserRole.save(); 
     } 
     else 
     { 
      var role = new Parse.Role(CONSTANTS.GENERAL_USER_ROLENAME, new Parse.ACL()); 
      role.getUsers().add(user); 
      return role.save(); 
     } 
    }).then(function(generalUserRole) { 
     var acl = new Parse.ACL(); 
     acl.setWriteAccess(user, true); 
     acl.setRoleReadAccess(generalUserRole, true); 
     req.object.setACL(acl); 
    }, 
    function(error) { 
     console.log(JSON.stringify(error)); 
    }); 
}); 

結果在ACL這是public read, user(write)(在儀表盤讀數)。

我試過在添加ACL後保存保存req.object。

我試過了,沒有res.success()(我知道在afterSaves中沒有必要)。

謝謝。

回答

1

我測試了你的代碼,發現了一些問題並修復了它們。我發現的問題有:

  1. ,這樣你就不需要寫response.success()
  2. ,你做得很好,當你設置的ACL的響應不afterSave只請求所需用戶但你沒有保存它..如果你不會在年底運行節省所以你需要與useMasterKey運行保存它不會保存的更改:爲了保存更改,真

在結束你的代碼看起來應該像下面這樣:

Parse.Cloud.afterSave(Parse.User, function (req) { 

    var user = req.object; 
    if (user.existed()) { return; } 

    var roleQuery = new Parse.Query(Parse.Role); 
    roleQuery.equalTo("name", "someRole"); 

    roleQuery.first({ useMasterKey: true }).then(function (role) { 

     if (role) { 
      role.getUsers().add(user); 
      return role.save(); 
     } else { 
      var myNewRole = new Parse.Role("someRole", new Parse.ACL()); 
      myNewRole.getUsers().add(user); 
      return myNewRole.save() 
     } 

    }).then(function (userRole) { 
     var acl = new Parse.ACL(); 
     acl.setWriteAccess(user, true); 
     acl.setRoleReadAccess(userRole, true); 
     user.setACL(acl); 
     return user.save(null,{ useMasterKey: true }); 
    }, function (error) { 
     console.log(JSON.stringify(error)); 
    }); 

}); 
+0

所以我曾試圖像這樣,它不工作,當你說,它的工作,我意識到這一定是別的東西。所以我刪除了我的Parse.User表中的所有用戶(使用舊的ACL),然後一切正常。謝謝。 – MayNotBe

+0

很酷。很高興現在它適合你 –