【问题标题】:Create Parse.com Roles Programmatically以编程方式创建 Parse.com 角色
【发布时间】:2016-01-17 02:34:36
【问题描述】:

我希望以编程方式创建 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();
})

【问题讨论】:

    标签: javascript parse-platform roles parse-cloud-code


    【解决方案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);
        });
    });
    });
    

    【讨论】:

      【解决方案2】:

      cloudcode:将子角色添加到父...示例工作代码,但可能不是您的最佳实现...它的解析/主干/木偶实现。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        相关资源
        最近更新 更多