简体   繁体   中英

Unable to create role on Parse.com using CloudCode

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM