我使用具有per-db-and-user访问权限的CouchDB权限系统。每个数据库代表一个应用程序,它们在类似主屏幕的概述和其他地方显示。我需要一种有效的方法让CouchDB告诉我用户是否可以访问数据库 - 例如GET /_all_dbs
只返回当前用户有权访问的数据库。一旦在一个页面上显示十几个以上的应用程序,轮询视图或文档就会变得太慢,尽管我仍然可以调整limit = 1的视图轮询。不是有更好的方法吗?
答案 0 :(得分:2)
查询数据库的_security
文档。
curl http://localhost:5984/db_name/_security
{"admins":{"names":["dbadmin"],"roles":["reader"]},"members":{"names":[],"roles":[]}}
对于具有admins / users的每个数据库,couchdb都会创建一个名为_security
的特殊文档,其中包含该数据库的所有用户的列表。您可以对该文档发出curl请求,并获取一个数组,该数组将为您提供该数据库的所有admins
和members
。
修改强>
你知道你的应用程序最好,但我认为这是一个有用的策略吗?每个couchdb用户都存储在_users
数据库中。它就像任何其他数据库一样。您可以在其上创建一个视图,然后进行查询。您甚至可以在文档中添加其他字段以帮助查询。如何在数据库上创建用户时,还要更新_users
数据库中的相应文档。
现在,如果您致电_users/_all_docs?include_docs=true
,您将获得一个用户列表以及他们有权访问的数据库。一个请求,您就拥有了所需的一切。