【问题标题】:Meteor with multiple Mongo DBs具有多个 Mongo DB 的 Meteor
【发布时间】:2015-11-21 21:36:09
【问题描述】:

我刚刚开始使用 Meteor 和 MongoDB。我想知道是否有办法一次使用两个或多个数据库。 这些 DB 必须在运行时生成。

我的想法是我有几个用户组绝对不允许访问其他用户组的数据。如果有其他方法告诉我。

【问题讨论】:

  • 如果您只有一个数据库,他们为什么能够访问其他用户组的数据?
  • 他们需要相同的表,并且不允许在客户端缓存数据(我将它们用于离线模式)。你知道我的意思吗?
  • 我真的不明白你的问题。能具体一点吗?
  • 我的数据库中的数据是加密的。对于应用程序脱机运行的情况,我将数据库移动到 AppCache (atmospherejs.com/meteor/appcache) 中。但是客户端已经解密了数据。然后是不允许访问的解密数据。问题是:我尝试只获取我被允许访问的数据。
  • 您可以根据凭据将特定数据publish 发送到特定客户端。它是否在同一个数据库、集合或文档中都没有关系。如果您不发布它 - 客户将不会得到它。您能否详细说明为什么这不适用于您的情况?

标签: javascript node.js mongodb meteor database


【解决方案1】:

好吧,我已经做到了……很久以前,但我仍然想在这里发布答案。

你需要的是这样的:

dbCustomer = new MongoInternals.RemoteCollectionDriver(
    CUSTOMER_DB_URL + customerId
);

这样您就可以创建您在创建新集合时使用的自定义驱动程序:

Products['procucts' + customerId] = new Meteor.Collection(
    'products' + customerId,
    {
        _driver: dbCustomer,
        idGeneration: 'STRING'
    }
);

那么我为什么要这样做 Products['productus' + customerId] 而不是 Products 呢?

在这里您必须了解客户端上的 MinoMongo 数据库。客户端不关心您使用的是哪个驱动程序(仅在服务器端使用驱动程序)。想象一下用户注销并登录到另一个客户的情况。现在他正在使用不同的数据库,但仅在服务器上。在客户端上,您仍然只有 1 个数据库和 1 个名为 Products 的集合。知道什么?确切地!您拥有来自旧客户的数据和来自新客户的数据。

这不是数据安全问题,但您也会看到这两个数据(这显然是错误的)。为了防止这种情况,您需要在客户端上进行 2 个单独的集合。为此,您将customerId 添加到集合中。

就是这样。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多