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

Posted

技术标签:

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

我希望,因为根据我收集的信息,您无法在数据浏览器中创建父/子关系或角色引用角色。我目前在 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();
)

【问题讨论】:

【参考方案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);
);
);

【讨论】:

以上是关于以编程方式创建 Parse.com 角色的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在Liferay中以编程方式创建用户和网站模板的角色,权限?

以编程方式将角色添加到身份

如何使用 Cloud Code 删除 Parse.com 中的角色

以编程方式为特定用户角色禁用税收

使用 Keycloak API 以编程方式将角色分配给组

asp.net 成员资格 - 如何以编程方式确定用户是不是在角色中