Как создать мультитенантные разрешения для приложений SaaS в firebase firestore - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь выяснить, как создавать разные роли и разрешения для мультитенанта (корпоративное приложение с несколькими клиентами). Например, у нашего приложения есть customerA и customerB, и у каждого клиента есть свои собственные пользователи (customerAUser1, customerAUser2 и т. Д.) И с разными ролями, такими как «Администраторы», «Менеджеры», «Партнеры», «Подрядчики» и т. Д. Эти роли различны для каждого клиента. Их администраторы решают, какие роли они хотят иметь.

Таким образом, администратор, скажем, customerA регистрируется и называет свою компанию как customerA.

Администратор затем в пользовательском интерфейсе создает роль «менеджер» и разрешает доступ к разделу «люди» в настройке (предположим, что в настройке есть несколько вкладок). И затем создает «подрядчик», чтобы не иметь никакого доступа в любом месте «установки».

Затем администратор импортирует всех своих пользователей из файла Excel.

Файл Excel будет выглядеть примерно так:

name, email, phone, role
john,jo@customerA.com,123456,manager
jane,jane@customerA.com,123456,contractor

Аналогичным образом, AdminB клиентаB регистрирует свою компанию и создает свой собственный набор правил.

Теперь, каждый раз, когда пользователь входит в систему, мы должны гарантировать, что данные не будут утекать ч / б customerA и customerB. Таким образом, каждая коллекция в БД должна иметь "customerId" или что-то в этом роде. Кроме того, нам необходимо проверить, имеют ли люди доступ к определенной коллекции в зависимости от их «роли».

Как лучше всего подойти к этому в БД пожарного магазина?

1 Ответ

0 голосов
/ 27 апреля 2018

Если никогда не бывает случаев, когда у Клиента A и Клиента B одни и те же пользователи, лучший способ решить эту проблему - использовать вложенные коллекции. Например:

customers/{customer_id}/users/{user_id}

Затем, при запросе и выполнении действий, вы всегда можете привязаться к этому:

firebase.firestore()
        .collection('customers')
        .doc('customerA')
        .collection('users')
        .where('role','==','admin')

Если вам действительно нужна межвидовая видимость, то правильным способом будет иметь customer_id или tenant_id в самом документе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...