以编程方式创建 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中以编程方式创建用户和网站模板的角色,权限?