1

(1) テナント固有のロールを作成し (新しいテナントが作成されるたびに)、(2) それらを任意のテナントに関連するオブジェクト/レコード/行の ACL に割り当てることにより、Parse にマルチテナントを実装しました。与えられたテーブル。

Backand と同じ (役割ベースの) ロジックであり、どのように実装する必要があるのだろうか。

例や例へのポインタは素晴らしいでしょう。

4

1 に答える 1

3

マルチテナンシー アプリの構築に役立つ 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}}'))

このステートメントを編集して、アプリ内のテナントを識別するものをフィルター処理できます。

各オブジェクトでこれを行うことができます。これは、オブジェクトのセキュリティ タブにあります。 ここに画像の説明を入力

于 2016-03-14T08:53:48.503 に答える