2016-08-04 36 views
0

Ich versuche, eine "general_user" -Rolle für meine App einzurichten, so dass Admin einen Benutzer verbannen kann, indem er sie aus dieser Rolle entfernt.parse-server set ACL für Benutzer und Rolle in afterSave

Dieser Code:

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

Ergebnisse in einer ACL, die public read, user(write) (Lesen im Armaturenbrett) ist.

Ich habe versucht, das Speichern des req.Objekts nach dem Hinzufügen der ACL zu speichern.

Ich habe mit und ohne res.success() versucht (was ich verstehe, ist nicht notwendig in afterSaves).

Vielen Dank.

Antwort

1

Ich habe Ihren Code getestet und einige Probleme gefunden und sie behoben. Die Probleme, die ich fand, waren:

  1. Die Antwort nicht in nur aftersave die Anforderung erforderlich ist, so müssen Sie haben nicht schreiben response.success()
  2. Sie gut, wenn Sie die ACL-Set für der Benutzer muss man aber speichern Sie es nicht .. wenn Sie nicht speichern am Ende läuft es wird nicht die Änderungen speichern, so dass Sie speichern mit useMasterKey ausführen müssen: true, um die Änderungen zu speichern

Am Ende sollte Ihr Code wie folgt aussehen:

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

So hatte ich es so versucht und es hat nicht funktioniert, wenn Sie sagten, es arbeitete ich erkannte, dass es etwas anderes sein muss. Also löschte ich alle Benutzer in meiner Parse.User-Tabelle (mit den alten ACLs) und dann hat alles gut funktioniert. Vielen Dank. – MayNotBe

+0

Kühl. Glücklich, dass es jetzt für dich funktioniert –