2

我从头开始创建一个 CMS,并决定使用 CouchDB 作为我的数据库解决方案。对于我的 CMS,我需要各种帐户,当然还有不同的用户角色(管理员、作者、未注册用户等)。

首先,我想我自己会在我的 CMS 中编写授权,但是 CouchDB 内置了类似的东西,所以我想问:

使用 CouchDB 创建多用户应用程序的最佳实践是什么?

  1. 只为 CouchDB 创建一个管理员并自己管理限制、角色和帐户?
  2. 使用 CouchDB 的内置功能来完成这一切?(假设为 CMS 的每个管理员创建一个 CouchDB 管理员用户?)

如果我以后想添加其他 3rd-party 授权怎么办?假设我希望用户通过 Twitter/Facebook/Google 登录?

问候, 皮波

4

1 回答 1

6

关键问题是您是否想向公众公开 CouchDB。

如果您想将您的 CMS 构建为经典的 3 层架构,其中 CouchDB 只能从特权脚本层(例如 PHP)访问,那么我建议您推出自己的授权系统。这将使您更好地控制授权逻辑。特别是,您可以实现基于文档的读取访问控制(在 CouchDB 安全系统中不可用)。

相反,如果您想向公众公开 CouchDB,情况就不同了。您实际上无法编写服务器端逻辑(通过更改提要的单独异步侦听器除外),因此您必须使用CouchDB 内置的身份验证/授权系统。这限制了您在数据库级别(而不是文档级别!)上控制读取访问。可以使用验证功能控制写访问。CouchDB 管理员不应等同于应用程序管理员,因为 CouchDB 管理员与传统设置中的服务器管理员相当。CouchDB 中的数据库管理员会更合适(可以更改设计文档并因此对 CMS 安装进行修改,例如添加插件)。所有其他具有写访问权限的用户都可以实现为数据库成员。

我更喜欢第二种方法,因为这将使您有可能利用 CouchDB 的所有出色功能,例如复制和更改提要。但是,如果您需要细粒度的读取访问控制,则必须在具有不同成员的数据库之间进行一些过滤复制。

如果您想使用 CouchDB 提供的身份验证机制以外的其他身份验证机制,您最终将不得不修改安装(如果您想使用托管的 CouchDB,这可能是一个问题)。对于 facebook 插件,请参见https://github.com/ocastalabs/CouchDB-Facebook-Authentication

于 2013-04-22T10:34:54.437 回答