基于CouchDB的多用户应用程序的最佳实践?

时间:2013-04-22 06:58:19

标签: database authorization couchdb backend multi-user

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

首先我想我会在我的CMS中编程授权,但CouchDB有这样的内容,所以我想问:

使用CouchDB创建多用户应用的最佳做法是什么?

  1. 只为CouchDB创建一个管理员并自行管理限制,角色和帐户?
  2. 使用CouchDB的内置功能来实现这一切? (假设为CMS的每个管理员创建一个CouchDB管理员用户?)
  3. 如果我想稍后添加其他第三方授权怎么办?假设我希望用户通过Twitter / Facebook / Google登录?

    问候, PIPO

1 个答案:

答案 0 :(得分:6)

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

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

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

我更喜欢第二种方法,因为这样可以充分利用CouchDB的所有优点,如复制和更改提要。但是,如果需要细粒度的读访问控制,则必须在具有不同成员的数据库之间进行一些过滤复制。

如果要使用CouchDB提供的其他身份验证机制,最终必须修改安装(如果要使用托管的CouchDB,则可能会出现问题)。对于facebook插件,请参阅例如https://github.com/ocastalabs/CouchDB-Facebook-Authentication