确定CouchDB访问权限的最有效方法

确定CouchDB访问权限的最有效方法,couchdb,Couchdb,我使用的是CouchDB权限系统,具有每数据库和用户访问权限。每个DB代表一个应用程序,它显示在主屏幕(如概览)和其他位置。我需要一种有效的方法让CouchDB告诉我用户是否有权访问数据库-例如,只返回当前用户有权访问的数据库的GET/\u all\u dbs。当一个页面上显示十几个左右的应用程序时,对视图或文档的轮询速度就太慢了,尽管我仍然可以使用limit=1调整视图轮询。但是没有更好的方法吗?查询数据库的\u security文档 curlhttp://localhost:5984/db_

我使用的是CouchDB权限系统,具有每数据库和用户访问权限。每个DB代表一个应用程序,它显示在主屏幕(如概览)和其他位置。我需要一种有效的方法让CouchDB告诉我用户是否有权访问数据库-例如,只返回当前用户有权访问的数据库的
GET/\u all\u dbs
。当一个页面上显示十几个左右的应用程序时,对视图或文档的轮询速度就太慢了,尽管我仍然可以使用limit=1调整视图轮询。但是没有更好的方法吗?

查询数据库的
\u security
文档

curlhttp://localhost:5984/db_name/_security

{“管理员”:{“名称”:[“dbadmin”],“角色”:[“读者”]},“成员”:{“名称”:[],“角色”:[]}

对于每个有管理员/用户的数据库,couchdb都有一个名为
\u security
的特殊文档,其中包含该数据库所有用户的列表。您可以向该文档发出curl请求,并获得一个数组,该数组将为您提供该数据库的所有
管理员
成员

编辑

您最了解您的应用程序,但我认为有一个策略可能会有所帮助?每个couchdb用户都存储在
\u users
数据库中。它和其他数据库一样。您可以在其上创建视图,然后查询它。您甚至可以向文档中添加其他字段以帮助查询。在数据库上创建用户时,您也会更新
\u users
数据库中的相应文档


现在,如果您调用
\u users/\u all\u docs?include\u docs=true
,您将获得一个用户列表以及他们可以访问的数据库。一个请求,你就拥有了你所需要的一切

查询数据库的
\u security
文档

curlhttp://localhost:5984/db_name/_security

{“管理员”:{“名称”:[“dbadmin”],“角色”:[“读者”]},“成员”:{“名称”:[],“角色”:[]}

对于每个有管理员/用户的数据库,couchdb都有一个名为
\u security
的特殊文档,其中包含该数据库所有用户的列表。您可以向该文档发出curl请求,并获得一个数组,该数组将为您提供该数据库的所有
管理员
成员

编辑

您最了解您的应用程序,但我认为有一个策略可能会有所帮助?每个couchdb用户都存储在
\u users
数据库中。它和其他数据库一样。您可以在其上创建视图,然后查询它。您甚至可以向文档中添加其他字段以帮助查询。在数据库上创建用户时,您也会更新
\u users
数据库中的相应文档


现在,如果您调用
\u users/\u all\u docs?include\u docs=true
,您将获得一个用户列表以及他们可以访问的数据库。一个请求,你就拥有了你所需要的一切

谢谢。这仍然不是一个理想的解决方案,因为1)它可能不会比轮询视图快,因为它仍然是每个DB一个请求,2)基本上必须重新实现CouchDB用来检查用户是否有访问权限的代码-谢天谢地,这不算多,因为couchdb没有复杂的读访问权限。我不确定在这种情况下什么是最好的方法。我想补充的一点是,如果您已经创建了一个视图,那么您可以一次使用多个键查询它。您可以共享当前用于查询的视图吗?查询多个键没有任何帮助-据我所知,一个视图查询只能访问一个数据库-如果您需要检查20个数据库的访问权限,则必须执行20个请求。下面是我要做的:1)在用户会话中缓存可访问的应用程序。2) 在登录时擦除此会话状态,这样我就不需要实现太复杂的缓存更新机制。好的。你知道,如果听起来不太复杂,我还有另一个建议。它对评论来说太大了,所以我要在答案中加上它。如果有帮助,请告诉我。谢谢你的建议。这是一个有趣的想法。如果您a)不使用角色为用户提供数据库访问权限,b)永远不要将members字段留空,这样访问总是受限的,也就是说,如果您总是将所有用户直接分配给members和admin字段,那么这样做是有意义的。然而,在使用角色和/或对所有用户开放访问的一般情况下,您的建议将包含一个相当复杂的更新代码-因此我不会在我的案例中使用它。谢谢。这仍然不是一个理想的解决方案,因为1)它可能不会比轮询视图快,因为它仍然是每个DB一个请求,2)基本上必须重新实现CouchDB用来检查用户是否有访问权限的代码-谢天谢地,这不算多,因为couchdb没有复杂的读访问权限。我不确定在这种情况下什么是最好的方法。我想补充的一点是,如果您已经创建了一个视图,那么您可以一次使用多个键查询它。您可以共享当前用于查询的视图吗?查询多个键没有任何帮助-据我所知,一个视图查询只能访问一个数据库-如果您需要检查20个数据库的访问权限,则必须执行20个请求。下面是我要做的:1)在用户会话中缓存可访问的应用程序。2) 在登录时擦除此会话状态,这样我就不需要实现太复杂的缓存更新机制。好的。你知道,如果听起来不太复杂,我还有另一个建议。它对评论来说太大了,所以我要在答案中加上它。如果有帮助,请告诉我。谢谢你的建议。这是一个有趣的想法。我会说的