我如何自动将angular色分配给CouchDB用户?

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

// 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); } }); }; 

正如你所看到的,我有一个名为angular色的variables,我想在“angular色”数组中设置。 不幸的是,你可能知道,CouchDB只允许pipe理员设置angular色。 我可以这样做,但是我将这些angular色当作机构使用,所以我希望注册用户能够select他们正在注册的机构,因此应该自动为其分配angular色。 没有硬编码我的pipe理员凭据到这个方法,即nano.config.url = "http://admin:password@127.0.0.1:5984/"我怎么能自动分配一个新的用户到他们指定的angular色,因为我已经提到?

CouchDB使用roles数组来决定数据库的授权 。 这允许您通过用户angular色configuration对给定数据库的访问权限。 如果用户可以设置自己的angular色,那么有人可以让自己进入任何机构。 他们甚至可以使自己成为一个pipe理员,从而​​破坏了保护您的pipe理员密码的目的。

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


如果你真的想这样做,有一个办法。 您收到的错误来自_users数据库_design/_auth中的更新validationfunction 。 作为pipe理员,您可以更改此function。

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