Вот требование, которое я пытаюсь реализовать через XACML / ABAC в учебных целях:
Информационная модель
Ресурсы: Здание, Блок
- there are many buildings (ex. B1, B2, B3, ... Bn)
- в каждом здании много юнитов (т. е. юнит является дочерним по отношению к зданию) (например, B1U1, B1U2, B1U3, ...)
Тема: Обслуживающий персонал
Правила
- A housekeeper can "open" a "unit" if
- they have "open" permission on that "unit" OR
- если у них есть «открытое» разрешение на «здание», в котором находится этот «блок».
Есть указатели?
Обновлять
По сути, вот что меня беспокоит: если требование было чем-то вроде, экономка может "открыть" "unitX", если у него / нее есть разрешение "открывать" на "unitX". Здесь я бы просто написал простое правило.
Однако с моими фактическими требованиями есть следующие опасения:
Поскольку существует не один конкретный ресурс, а множество ресурсов одного типа, следует ли мне писать отдельную политику для каждого ресурса? Бывший. отдельная политика для построения «B1», другая для «B2» и так далее?
Как политика «узнает» об иерархической взаимосвязи между зданием и единицей.
Теперь, когда я думаю об этом дальше, я думаю, что следующий подход должен работать (?)
- Запрос будет включать следующее
resource: / {buildingId} / {unitId} // вот как политика узнает родительское отношение к потомку
действие: открыть
subject: subjectId и, возможно, все разрешения, которые есть у этого субъекта (все еще думает о том, как представлять разрешения, какие-либо предложения?)
- Определите одну политику с помощью rule: // псевдокод if (subject.permissions включает open on {buildingId} OR open on {unitId}), затем разрешить else deny.
Какие-либо предложения?
Спасибо,
Джатин