Хранится дерево – неограниченная иерархия компаний и сотрудников.
Необходимо добавить отдельным веткам некий признак, который может быть:
- не установлен — наследуется из узлов выше;
- разрешён явно;
- запрещён явно.
Дерево описано массивом «предков» — у каждого узла есть свойство, составляющее «путь» к нему. Это существующий проект.
Для узла понадобится узнавать значение этого свойства — смотреть, установлено ли оно в нём самом, или идти выше по предкам, пока не найдётся явно установленное значение.
С Mongo опыт минимальный, поэтому пока не знаю, как лучше это реализовать. Пока два варианта вижу:
- два булевых поля: явное разрешение и явный запрет. Тут плохо, что 2 бита кодируют 4 состояния, а нам нужны только 3. Четвертое — потенциальная ошибка (оба включены).
- одно поле, скажем,
int
, где 1
значит разрешено, 2
запрещено, а 0
, отсутствие поля или null
– «не установлено, ищите в предках».
upd. В основанном на частных мнениях
гайде, смотрю, пишут, что лучше хранить как строковые константы:
"ALLOWED", "DENIED", "NOT_APPLICABLE"