1

I want to create Role objects in my Parse.com app using a cloud code function. The code I have tried is:

Parse.Cloud.define("addRole",function(request,response) {
  var publicReadACL = new Parse.ACL();
  publicReadACL.setPublicReadAccess(true);
  var user=Parse.User.current();
  var baserolename=request.params.organisation;
  var roleType=request.params.roleType;
  var roleName=baserolename+"_"+roleType;
  Parse.Cloud.useMasterKey();
  var role = new Parse.Role(roleName,publicReadACL);
  var occupants=role.getUsers();
  occupants.add(user);  
  role.save(role).then (function(role) {
      response.success(role.toJSON());
  },
  function(error) {
            response.error(error);
  });
});

Running this function doesn't create the role and gives a response of {"code":105} - no further error message. 105 seems to mean "Invalid Key Name", but I am not sure which key is invalid or why.

1 Answer 1

2

I've got a slightly modified version to work. Here's the Typescript version that I've just tested:

Parse.Cloud.define('addRole', (req: Parse.Cloud.FunctionRequest, res: Parse.Cloud.FunctionResponse) => {

    let publicReadACL = new Parse.ACL();
    publicReadACL.setPublicReadAccess(true);

    let user = req.user;

    let baseRoleName: string = req.params.organisation;
    let roleType: string = req.params.roleType;
    let roleName: string = `${baseRoleName}_${roleType}`;

    Parse.Cloud.useMasterKey();

    let role = new Parse.Role(roleName, publicReadACL);

    let occupants = role.getUsers();
    occupants.add(user);

    role.save()
        .then((role: Parse.Role) => {
            res.success(role.toJSON())
        }, res.error);

});

Key differences:

  • How the user is obtained. (this should not matter. I tested your version of obtaining the current user and that worked fine too)
  • How the role is saved.

Here's the compiled Javascript version:

Parse.Cloud.define('addRole', function (req, res) {
    var publicReadACL = new Parse.ACL();
    publicReadACL.setPublicReadAccess(true);
    var user = req.user;
    var baseRoleName = req.params.organisation;
    var roleType = req.params.roleType;
    var roleName = baseRoleName + "_" + roleType;
    Parse.Cloud.useMasterKey();
    var role = new Parse.Role(roleName, publicReadACL);
    var occupants = role.getUsers();
    occupants.add(user);
    role.save()
        .then(function (role) {
        res.success(role.toJSON());
    }, res.error);
});
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks. I was going crazy with this and it was just because I put the argument in save. Honestly my worst nightmare would be having to work with Javascript all day.
Likewise here. Typescript just saves a whole class of minor errors which can be a real pain to debug later.

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.