如何自动为CouchDB用户分配角色?

时间:2013-03-06 21:30:12

标签: node.js couchdb couchdb-nano

我有以下注册用户的方法:

// Registration method
exports.register = function(req, res) {
    var username = req.body.username,
        password = req.body.password,
        first = req.body.first;
        last = req.body.last;
        role = req.body.institution;

    nano = require('nano')('http://127.0.0.1:5984');
    var users = nano.use('_users');

    var user = {
                    "_id": "org.couchdb.user:" + username,
                    "name": username,
                    "type": "user",
                    "roles": [],
                    "password": password,
                    "realname": first + " " + last
                };

    users.insert(user, function(err, body) {
        if(err) {
            res.send(err.reason, err.status_code);
        } else {
            res.send(body, 200);
        }
    });
};

正如您所看到的,我有一个名为role的变量,我想在“roles”数组中设置它。不幸的是,您可能知道,CouchDB只允许管理员设置角色。我对此很好,但我使用角色作为机构,所以我希望注册用户能够选择他们正在注册的机构,因此它应该自动为他们分配这个角色。没有将我的管理员凭证硬编码到此方法中,即 nano.config.url = "http://admin:password@127.0.0.1:5984/" 如上所述,如何自动将新用户分配到指定的角色?

1 个答案:

答案 0 :(得分:3)

CouchDB使用roles数组来决定database authorization。这允许您通过用户角色配置对给定数据库的访问。如果用户可以设置自己的角色,那么有人可以让自己访问任何机构。他们甚至可以使自己成为管理员,这违背了保护管理员密码的目的。

我不确定您的用例是什么,但我认为您不会试图阻止访问到其他机构。相反,我怀疑您正在尝试使用角色来执行其他应用程序功能(例如,为他们过滤信息以简化他们看到的内容)。由于您想要执行非安全功能,我强烈建议您只将自己的字段添加到用户文档中。您可以为每个用户添加institutions属性。


如果真的想要这样做,那就有办法了。您收到的错误来自_design/_auth数据库中_users的{​​{3}}。作为管理员,您可以更改此功能。

下载文件。打开文件并搜索Only _admin may edit roles以查看测试的执行位置。删除该条件并将文档保存回CouchDB。