我正在尝试为我的应用设置“general_user”角色,因此管理员可以通过从该角色中删除用户来禁止用户。
此代码:
Parse.Cloud.afterSave(Parse.User, function(request, response) {
var user = request.object;
if (user.existed()) { return; }
var roleQuery = new Parse.Query(CONSTANTS.ROLE_CLASSNAME);
roleQuery.equalTo("name", CONSTANTS.GENERAL_USER_ROLENAME);
roleQuery.first(CONSTANTS.USE_MASTER_KEY)
.then(function(generalUserRole) {
if(generalUserRole)
{
generalUserRole.getUsers().add(user);
return generalUserRole.save();
}
else
{
var role = new Parse.Role(CONSTANTS.GENERAL_USER_ROLENAME, new Parse.ACL());
role.getUsers().add(user);
return role.save();
}
}).then(function(generalUserRole) {
var acl = new Parse.ACL();
acl.setWriteAccess(user, true);
acl.setRoleReadAccess(generalUserRole, true);
req.object.setACL(acl);
},
function(error) {
console.log(JSON.stringify(error));
});
});
结果在public read, user(write)
的ACL中(在仪表板中读取)。
我在添加ACL后尝试保存req.object的保存。
我尝试过使用和不使用res.success()
(我明白在afterSaves中没有必要)。
谢谢。
答案 0 :(得分:1)
我测试了你的代码,发现了一些问题并修复了它们。我发现的问题是:
最后,您的代码应如下所示:
Parse.Cloud.afterSave(Parse.User, function (req) {
var user = req.object;
if (user.existed()) { return; }
var roleQuery = new Parse.Query(Parse.Role);
roleQuery.equalTo("name", "someRole");
roleQuery.first({ useMasterKey: true }).then(function (role) {
if (role) {
role.getUsers().add(user);
return role.save();
} else {
var myNewRole = new Parse.Role("someRole", new Parse.ACL());
myNewRole.getUsers().add(user);
return myNewRole.save()
}
}).then(function (userRole) {
var acl = new Parse.ACL();
acl.setWriteAccess(user, true);
acl.setRoleReadAccess(userRole, true);
user.setACL(acl);
return user.save(null,{ useMasterKey: true });
}, function (error) {
console.log(JSON.stringify(error));
});
});