如何使用每个用户数据库安全模型在couchapp中创建用户数据库? (按文件读取访问权限)

时间:2011-03-27 09:54:01

标签: security couchdb couchapp

您好我读了两种实现couchapps的每文档读取访问的方法:

  1. 每个用户都有自己的数据库,其中只包含该用户可以阅读的数据。然后,所有用户都使用复制过滤器写入主数据库,该数据库复制到所有用户数据库,该过滤器决定谁可以读取内容。
  2. 使用列表功能过滤其他视图的输出,并限制通过代理服务器和白名单进行访问。
  3. 我对此有一些疑问:

    1. 是否有更多可能性来加强文档级别的读取权限?

    2. 如何在couchapp中创建用户私有数据库?我确实需要管理员权限,但填写我的应用程序的signUp表单的用户显然不具有管理员权限。我需要一个中间层(php等...)进行注册过程,以便我可以创建所需的数据库吗?

    3. 当我终于拥有这个数据库时,我需要使用过滤器开始连续复制。在某处,我读到重启服务器时不会恢复此类复制。我是否需要一个chronjob,在服务器崩溃的情况下,需要x个小时重新创建这些复制?

    4. 是不是浪费了大量的磁盘空间?对于注册我的应用程序的每个用户来说,大多数数据都会被复制,或者我错了吗? (特别是如果只有很少的信息不能被其他人阅读)

2 个答案:

答案 0 :(得分:2)

  1. 除了修改CouchDB源代码之外,我知道没有其他方法可以立即使用。一种可能性是使用可能具有externals API的主干(或释放时的v1.1)。外部是Web服务器CouchDB将一些连接转发到。

  2. 您需要第三个图层,但不一定是中间图层。您的外部软件将作为管理员连接到CouchDB并执行待处理的任务。例如,当用户需要新数据库时,他们在公共数据库中创建文档,然后外部软件将创建数据库,将用户指定为管理员等。它非常容易 通过查询/_changes?feed=continuous来执行此操作,因为您可以获得用户的实时更新。我更喜欢这个而不是中间层,因为软件更简单(没有额外的Web开发,只有CouchDB GET和PUT),它可以崩溃,重启,升级等,而不会对用户产生太大影响。

  3. 无论如何,一个cron工作并不是一个坏主意。嘿,它可能是上面第2步的外部处理器的一部分!但是,从CouchDB 1.1开始,复制将在沙发重新启动后重新启动。

  4. 不应浪费太多空间。根据您的应用程序,您希望获得共享数据库中的所有共享数据,以及每个用户的私有数据库中的所有私有数据。但即使您有重复的数据,我也不会将其称为 waste 。与开发人员的工作量或安全问题的无形成本相比,磁盘空间是一项非常的小费用。

  5. 根据您的应用程序,您将来可以获得移动或离线功能的巨大机会。当您发布iPhone,桌面或离线Web应用程序时,用户可以使用其数据库的本地副本,然后在服务器重新联机后与其“官方”数据库同步。对于某些应用程序,这已成为必备功能,因为人们希望在任何情况下都能使用应用程序。

答案 1 :(得分:0)

我在学士论文中汇总了一些读取访问的例子。您可以在此处找到示例代码:https://github.com/Goltergaul/bachelorthesis2---todolist-couchapp

相关问题