2015-10-18 62 views
1

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

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

回答

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