以编程方式创建Parse.com角色

时间:2015-10-18 20:09:30

标签: javascript parse-platform roles cloud-code

我希望以编程方式创建Parse.com角色,因为根据我收集的内容,您无法在数据浏览器中创建引用角色的父/子关系或角色。我目前在Parse中没有任何角色。当我运行以下代码时,我在JS控制台中得到400(错误请求)。

$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 个答案:

答案 0 :(得分:1)

cloudcode:将子角色添加到父级...示例工作代码,但可能不是您最好的实现...它的解析/主干/牵线木偶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);
});
});

答案 1 :(得分:1)

要确保调用成功/错误。您还需要注意确保将用户添加到已保存的角色中。如果您的添加角色已被保存,您也只能为角色添加角色。

以下是可行的:

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