В настоящее время я разрабатываю систему аутентификации на основе ролей для ресурсов, у которых многие пользователи имеют разные права доступа к ней.
Роль может быть отдельным пользователем или группой ролей (поэтому роль - это дерево ролей). (см. рисунок ниже)
Ресурс может иметь несколько свойств аутентификации (например, чтение, запись, удаление), где каждая из них представляет собой список ролей, которым разрешено выполнять доступ к операции. (см. рисунок ниже)
Проблема в том, что если я хочу проверить, имеет ли пользователь право на доступ к свойству, я должен пройти через n деревьев в худшем случае (где n - количество ролей, назначенных для свойства).
Так, например, чтобы проверить, может ли «Макс» прочитать свойство, мне может понадобиться проверить деревья «Маркетинг», «Управление» и «Администрирование», если они содержат «Макс».
Вам известен какой-либо алгоритм или альтернативный подход, который устраняет довольно дорогие поиски по дереву при сохранении системы ролей или что-то такое же мощное.
В идеальном случае будет выглядеть как O (log (n)) для n ролей.
Спасибо,
Финн