Бизнес-роли 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, предпосылка по-прежнему применима).
Использование этой структуры позволяет легко связать пользователя с несколькими компаниями, а также легко определить, какие пользователи связаны с каждой компанией и какую роль они играют в этой компании.