Couchdb 管理具有不同权限的数据库之间的同步

Couchdb 管理具有不同权限的数据库之间的同步,couchdb,pouchdb,Couchdb,Pouchdb,我正在使用PockDB和couchdb构建一个应用程序。结构是每个用户都有自己的数据库(我已经激活了每个用户选项) 然后,为了简化,假设有一个为所有用户聚合数据的数据库,一个位置数据库 此数据库与用户数据库同步 对于每个用户数据库,该用户具有角色admin 位置数据库的管理员用户为admin。常规用户不会作为管理员添加到此数据库。每个文档都有一个userId属性。userdb和locationdb之间的同步将按userID进行过滤 现在,当我以用户身份登录应用程序时,我有权启动PockDB上的l

我正在使用PockDB和couchdb构建一个应用程序。结构是每个用户都有自己的数据库(我已经激活了每个用户选项)

然后,为了简化,假设有一个为所有用户聚合数据的数据库,一个位置数据库

此数据库与用户数据库同步

对于每个用户数据库,该用户具有角色admin

位置数据库的管理员用户为admin。常规用户不会作为管理员添加到此数据库。每个文档都有一个userId属性。userdb和locationdb之间的同步将按userID进行过滤

现在,当我以用户身份登录应用程序时,我有权启动PockDB上的
localdb
和couchdb上的
userdb
之间的同步。因为用户是userdb上的管理员。到目前为止还不错

var remoteUser =
      new PouchDB(
        'https://domain:6984/' + 'userdb-' + hex,
        {
          auth: {
            username: 'user',
            password: 'password'
          }
        }
      )
    db.replicate.from(remoteUser).on('complete', function () {
      db.sync(remoteUser, { live: true, retry: true })
        .on('change', function (info) {
          dispatch('syncPrintQueue')
          console.log('sync remote user')
        }).on('pause', function () {
          console.log('user remote syncing done')
        })
    })
但是从应用程序中,我想将
userdb
同步到
locationdb
。作为用户,我不能这样做。所以我将auth添加为admin。现在我可以启动同步了

  var remoteLocation =
          new PouchDB(
            'https://domain:6984/' + 'locationdb-' + locationHex,
            {
              auth: {
                username: 'admin',
                password: 'password'
              }
            }
          )

        remoteUser.replicate.from(remoteLocation).on('complete', function () {
          remoteUser.sync(remoteLocation, {
            live: true,
            retry: true
          })
            .on('change', function (info) {
              console.log('location remote syncing ')
            }).on('pause', function () {
              console.log('location remote syncing done')
            })
        })
        dispatch('syncCompany', remoteLocation)
      },
问题是,现在im在当前会话中以管理员身份登录

我现在正在做的是在登录后立即在localStorage上存储用户信息。我用它在沙发上进行过滤或验证。而不是从检查当前会话返回的用户。这将允许我正确地过滤服务器端

将每个用户作为管理员添加到常规数据库不是一个选项。因此,我唯一的想法是将所有同步和授权移动到rails或node中的中间件


couchdb中是否有解决方案来管理这种情况?

标准的持久复制通常无法扩展到从(或向)多个数据库复制不频繁的更新。它一直在改进,支持使用调度器在许多永久复制中循环,所以您可以查看一下,看看它目前是否足够

临时解决方案是,它有监听器进程来观察_global_changes提要,并通过正则表达式模式匹配数据库名称,以确定哪些源数据库已更改,需要由其更改或复制程序进程之一重新检查