解析服务器设置用户 ACL 并分配角色
Parse Server set User ACL and assign Role
我正在将我的代码从 parse.com 转换为解析服务器,但收效甚微。 afterSave 函数的想法是只为用户分配 ACL,并将用户分配给 'user' 角色。
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;
});
}
});
"however I am unable to assign the user to the role"。添加 function(err) 以查看哪一步失败,并查看错误消息。
您显示的代码不正确。
试试这个
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);
query.first() return 对象不是数组,因此您应该查询 returned 结果,而不访问数组索引。倒数第二个.then块代码应该是
if (!roles) return Parse.Promise.error("no such role");
roles.getUsers({useMasterKey: true}).add(user);
return roles.save({}, { useMasterKey: true });
我正在将我的代码从 parse.com 转换为解析服务器,但收效甚微。 afterSave 函数的想法是只为用户分配 ACL,并将用户分配给 'user' 角色。
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;
});
}
});
"however I am unable to assign the user to the role"。添加 function(err) 以查看哪一步失败,并查看错误消息。
您显示的代码不正确。
试试这个
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);
query.first() return 对象不是数组,因此您应该查询 returned 结果,而不访问数组索引。倒数第二个.then块代码应该是
if (!roles) return Parse.Promise.error("no such role");
roles.getUsers({useMasterKey: true}).add(user);
return roles.save({}, { useMasterKey: true });