我有以下注册用户的方法:
// 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/"
如上所述,如何自动将新用户分配到指定的角色?
答案 0 :(得分:3)
CouchDB使用roles数组来决定database authorization。这允许您通过用户角色配置对给定数据库的访问。如果用户可以设置自己的角色,那么有人可以让自己访问任何机构。他们甚至可以使自己成为管理员,这违背了保护管理员密码的目的。
我不确定您的用例是什么,但我认为您不会试图阻止访问到其他机构。相反,我怀疑您正在尝试使用角色来执行其他应用程序功能(例如,为他们过滤信息以简化他们看到的内容)。由于您想要执行非安全功能,我强烈建议您只将自己的字段添加到用户文档中。您可以为每个用户添加institutions
属性。
如果真的想要这样做,那就有办法了。您收到的错误来自_design/_auth
数据库中_users
的{{3}}。作为管理员,您可以更改此功能。
下载文件。打开文件并搜索Only _admin may edit roles
以查看测试的执行位置。删除该条件并将文档保存回CouchDB。