我正在将我的代码从parse.com转换为解析服务器,但收效甚微。 afterSave功能的想法是仅为用户分配ACL并将用户分配给用户'角色。
ACL部分工作正常,但我无法将用户分配给该角色。
Parse.Cloud.afterSave(Parse.User, function(req, res) {
if (!req.object.existed()) {
var user = req.object;
var acl = new Parse.ACL(user);
acl.setReadAccess(user, true);
acl.setWriteAccess(user, true);
user.setACL(acl);
return user.save({}, { useMasterKey: true }).then(function() {
var query = new Parse.Query(Parse.Role);
query.equalTo("name", 'user');
return query.first({useMasterKey: true});
}).then(function(roles) {
if (roles.length < 1) return Parse.Promise.error("no such role");
roles[0].getUsers({useMasterKey: true}).add(user);
return roles[0].save({}, { useMasterKey: true });
}).then(function() {
return user;
});
}
});
答案 0 :(得分:2)
“但是我无法将用户分配给角色”。添加函数(错误)以查看哪个步骤失败,并查看错误消息。
您显示的代码不正确。
尝试这个
return user.save({}, { useMasterKey: true }).then(function() {
var query = new Parse.Query(Parse.Role);
query.equalTo("name", 'user');
return query.first({useMasterKey: true});
//first will return one object or null
}).then(function(role) {
//.getUsers() is equal .relation('users')
if(role){
role.getUsers().add(user);
return role.save(null, { useMasterKey: true });
}else{
return Parse.Promise.error("no such role");
}
}, console.error).then(function() {
return user;
}, console.error);
答案 1 :(得分:0)
query.first() 返回的是 Object 而不是 Array,所以你应该查询返回的结果,而不是访问数组索引。倒数第二个 .then 块代码应该是
'*abc* OR *def*'