我正在从事一个业余爱好者项目,以便更加熟悉 CouchDB。这是我第一次使用 CouchDB。对于这个项目,我的目标是调查是否可以使用 HTML、CSS、JavaScript、CouchDB 和 nginx 构建 Web 应用程序(即,我没有在 Couch 中托管任何代码,只是数据) .
这可能是非常不切实际的,但我首先想探索这个堆栈中的所有选项。
目前,我最大的问题是关于安全性。假设我在 CouchDB 中有几个数据库,每个数据库对应一个托管站点。对于此示例,我们将关注单个数据库——即单个站点。本网站的某些内容应该可供所有人使用,甚至是匿名用户;和其他东西应该只对具有特定角色的用户可用。我有哪些选择,每个选项的安全性如何?
到目前为止,我已经提出了一些想法,这是我计划在周末工作的一个:
- 将用户和角色添加到
/{site_db}/_security
.- 根据 Couch 文档
{site_db}
,这样做将需要来自经过身份验证的用户的任何数据请求。
- 根据 Couch 文档
- 添加一个名为 的用户
anon
,该用户只有一个角色,即anon
. - 当用户第一次访问该站点时,我的 JS 模型将检查当前会话的状态 (
GET /_session
)。- 如果不存在会话,则 JS 模型将使用该
anon
帐户进行身份验证。
- 如果不存在会话,则 JS 模型将使用该
- 在我的设计文档中定义视图。
- 应该只对非匿名用户可用的任何视图都应该检查
userCtx
对象上的角色。 - 任何新创建的文档的验证都应检查
userCtx
用户的角色是否在白名单上。
- 应该只对非匿名用户可用的任何视图都应该检查
这似乎应该可行,尽管我不禁认为它过于复杂,并且必须有更好的方法。另外,我不确定如何防止anon
用户更新他自己的用户文档以添加更多角色。