Бизнес-роли Firebase

Я работаю над разработкой приложения для нескольких компаний.

Я бью стену о том, как обрабатывать роли пользователей внутри каждой компании. Я видел роли пользователей для других приложений, но ни одно из них не соответствовало моему сценарию.

Companies
 - Company A {
      users {
         admins {
            admin1:{}
         },
         staff {
            staff1:{}
         },
         drivers {
            driver1:{}
         }
      }
   },
 - Company B {
     ...
   }

Для каждой компании... - Я хочу, чтобы администраторы компании создавали других администраторов / сотрудников / водителей - Я хочу, чтобы сотрудники компании создавали других водителей - Я хочу, чтобы драйверы были самыми низкими, не могли создавать пользователей

Я не вижу хорошего способа выполнить эту задачу! Любая помощь будет принята с благодарностью!

Спасибо!

Коннор

1 ответ

Решение

Рекомендуется сгладить и денормализовать ваши данные, чтобы структура вашей базы данных была более похожа на:

{
  "companies": {
    "company1": {
      "name": "Company A",
      "users": {
        "user1": {
            "admin": true
        }
      }
    },
    "company2": {
      "name": "Company B",
      "users": {
        "user1": {
            "admin": true
        },
        "user2": {
            "driver": true
        }
      }
    },
    "company3": { ... }
  },

  "users": {
    "user1": {
      "companies": {
        "company1": {
            "admin": true
        },
        "company2": {
            "admin": true
        }
      }
    },
    "user2": {
      "companies": {
        "company2": {
            "driver": true
        }
      }
    },
    "user3": { ... }
  }
}

Этот шаблон называется денормализацией и является рекомендуемым подходом при использовании баз данных NoSQL (например, базы данных Firebase Realtime). Основным недостатком этого является дублирование данных, но для получения подробной информации об этом см. Этот ответ, в котором объясняется ряд методов (хотя примеры приведены в JavaScript, предпосылка по-прежнему применима).

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