【问题标题】:Multitenancy in backand后端多租户
【发布时间】:2016-03-11 18:19:38
【问题描述】:

我已经在 Parse 中实现了多租户,方法是 (1) 创建特定于租户的角色(每次创建新租户时)和 (2) 将它们分配给与任何给定桌子上的租户。

我想知道它是否与 Backand 上的逻辑相同(基于角色)以及应该如何实现。

任何示例或指向示例的指针都会很棒。

【问题讨论】:

    标签: multi-tenant backand


    【解决方案1】:

    Backand 中基于角色的安全性将帮助您构建多租户应用程序,包括对象级安全性和预定义过滤器。预定义的过滤器对于多租户很重要。它允许您为不同的租户使用相同的对象并过滤数据,以便隔离每个租户。预定义过滤器是始终在服务器中运行并过滤数据的 NoSQL 或 SQL 语句。在 Backand 中,您可以自动创建一个语句,该语句将仅过滤请求用户创建的数据。您需要确保所有对象都与用户对象相关,以便此类过滤器语句起作用。 这是一个自动生成的 NoSQL 示例,它过滤特定用户的所有项目,除非该用户具有管理员角色:

    {
      "$or": [
        {
          "'{{sys::role}}'": "'Admin'"
        },
        {
          "user": {
            "$in": {
              "object": "users",
              "q": {
                "email": {
                  "$eq": "'{{sys::username}}'"
                }
              },
              "fields": [
                "id"
              ]
            }
          }
        }
      ]
    }
    

    这里同SQL:

    ( 'Admin' = '{{sys::role}}') or (`items`.`user` in (select `users`.`id` from `users` where `users`.`email` = '{{sys::username}}'))
    

    您可以编辑此语句,以便它过滤在您的应用中标识租户的内容。

    您可以对每个对象进行此操作。它位于对象的安全选项卡中。

    【讨论】:

    • 文档中缺少 {{sys::role}} 和 {{sys::username}} 的部分。文档中的示例仅显示 Admin='(blank)' 和 email = '(blank)'。我想知道是否是由于角度插值将“sys::”表达式评估为undefined
    • 感谢您的反馈,我们在文档生成器中遇到了故障 - 现已修复。