解析服务器设置用户ACL并分配角色

时间:2016-05-19 19:49:44

标签: node.js parse-platform parse-server

我正在将我的代码从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;
        });
    }

});

2 个答案:

答案 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*'