Я работаю над проектом ERM и пытаюсь придумать подходящий дизайн схемы для пользователей, ролей и групп в MongoDB`.Я новичок в разработке баз данных, и в настоящее время я создал этот дизайн.
- Пользователь может иметь одну роль
- Пользователь может быть членом нескольких групп
- Обе ролии группы имеют отдельные разрешения для каждого
- Как роли, так и группы могут быть добавлены, удалены и обновлены
- Разрешения пользователя рассчитываются по роли и группам
И разрешениерасчет для пользователя выполняется следующим образом:
Роль [USER
обновление ] + Группа [USER
просмотр ] = Пользователь [USER
просмотр, обновление ]
Роль [BLOG
запретить ] + группа [BLOG
просмотр ] = Пользователь [BLOG
запретить ]
Проблема, с которой я сталкиваюсь, заключается в расчете разрешений, поскольку этот дизайн потребует расчета разрешений при каждом изменении группы / роли.И если группа содержит сотни пользователей, это может вызвать проблемы с производительностью.
User {
role: String
permissions: [{
resource: String,
value: Number // Read(4), Edit(2), Create(8), Delete(1)
}]
}
Role {
name: String,
permissions: [{
type: String,
ref: 'Permissions'
}]
}
PermissionGroup {
name: String,
users: [{
type: String,
ref: 'User'
}],
permissions: [{
type: String,
ref: 'Permissions'
}]
}
Permissions {
resource: String,
value: Number // Read(4), Edit(2), Create(8), Delete(1)
}
Я хочу сделать это как можно более эффективным, поскольку при авторизации каждого запроса используются права пользователя.Каковы некоторые лучшие методы производительности для этого дизайна?