2

I'm looking to create Parse.com roles programmatically because from what I've gathered you can not create parent/child relationships or roles referencing roles in the data browser. I currently do not have any roles in Parse. When I run the following code I get 400 (Bad Request) in my JS console.

$scope.activateRoles = function(){
            console.log("activating vendor");
            Parse.Cloud.run("activateVendor ", {
                success: function (IDK) {
                    alert("The user roles were activated");
                },
                error: function (error) {
                    alert("The user roles were not activated.", error);
                }
            });
        }()

Parse.Cloud.define("createRoles", function(request, response){
    Parse.Cloud.useMasterKey();
    var admin = new Parse.ACL();
    admin.setPublicReadAccess(false);
    admin.setPublicWriteAccess(false);
    admin.getReadAccess("Uh792HOaqi");
    admin.getWriteAccess("Uh792HOaqi");
    admin.setReadAccess("Uh792HOaqi", true);
    admin.setWriteAccess("Uh792HOaqi", true);

    var adminRole = new Parse.Role("admin", admin);
    adminRole.save();

    var agentRole = new Parse.Role("agent", admin);
    agentRole.getRoles().add(adminRole);
    agentRole.save();

    var vendorRole = new Parse.Role("vendor", admin);
    vendorRole.getRoles().add(adminRole);
    vendorRole.save();
})

2 Answers 2

2

Got to make sure to call success/error. You also want to watch out for making sure to add users to a role that's already been saved. You also can only add roles to a role if the role your adding has already been saved.

Here's what will work:

Parse.Cloud.define("createRoles", function(request, response){
     Parse.Cloud.useMasterKey();
     var admin = new Parse.ACL();
     var adminRole = new Parse.Role("admin", admin);
     adminRole.save().then(function(adminRoleSaved){
        var promises = [];
        var agentRole = new Parse.Role("agent", admin);
        agentRole.getRoles().add(adminRoleSaved);
        promises.push(agentRole.save());

    var me = new Parse.Query(Parse.User);
    me.get(request.params.id, {
        success: function(me) {
            adminRoleSaved.getUsers().add(me);
            adminRoleSaved.save();
        },
        error: function(error){
        }
    });

    var vendorRole = new Parse.Role("business", admin);
    vendorRole.getRoles().add(adminRoleSaved);
    promises.push(vendorRole.save());

    Parse.Promise.when(promises).then(function() {
        response.success();
    }, function(error) {
        response.error(error);
    });
});
});
Sign up to request clarification or add additional context in comments.

Comments

1

cloudcode : add child role to parent ... sample working code but maybe not your best implementation... its parse/backbone/marionette impl.

Parse.Cloud.define("addrole", function(request, response) {
  var roleParent = request.params.parentName;
  var roleChild = request.params.childName.trim();
  var _role , _chrole;
  var _error = {
      };
  var _errorch = {
      };
  var _errorparm = {
      };
  var cst = {
      parent:"parent",
      pid:"pid",
      child:"child"
      };
  if(roleParent == roleChild)response.error(_errorparm);
  var cst1 = "parnt";
  var qp = new Parse.Query(Parse.Role);
  qp.equalTo("name", roleParent);
  var qc = new Parse.Query(Parse.Role);
  qc.equalTo("name", roleChild);
  Parse.Cloud.useMasterKey();
  qp.first().then(function(role) {
     _role = role;
     if (typeof _role === "undefined") {
        return Parse.Promise.error(_error);
     } else {
         cst.parent = _role.get("name");
         cst.pid = _role.get("objectId");
         return qc.first();
    };
   }
).then(function(rolechld) {
      _chrole = rolechld;
      if (typeof _chrole === "undefined") {
        return Parse.Promise.error(_errorch);
     } else {
      cst.child = _chrole.get("name");
      console.log(cst);
            _role.getACL().setRoleReadAccess(_chrole, true);
            _role.getRoles().add(_chrole);
            return _role.save();
        }
}).then(function(hello) {
  response.success(_chrole.toJSON());
}, function(error) {
  response.error(error);
});
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.