Как PIP разрешают правильные значения атрибутов? Какой интерфейс должен иметь возможность разрешать значение атрибута? Например, мне нужно получить роли пользователей, и в этом случае мне просто нужно передать атрибут для идентификатора пользователя. Теперь усложним эту задачу. Что делать, если у меня есть контекст, в котором роль пользователя может быть изменена, поэтому одного идентификатора пользователя здесь недостаточно. В этом случае мне нужно передать уровень доступа, для которого мы пытаемся получить роль пользователя.
Итак, в этом примере мы видим, что этот интерфейс будет меняться каждый раз, и единственный подходящий интерфейс будет принимать все.
Как обычно в этом случае реализуются PIP?
Обновить
Пример: у нас есть следующая иерархия:
Level 0 1 2
Organization < tenants < documents.
Символ ‹означает, что right является дочерним по отношению к левому операнду.
Пользователь может иметь роль администратора или пользователя на каждом уровне. Если пользователь имеет роль администратора на уровне n, то он может получить доступ ко всему на этом уровне и на уровне n + 1, n + 2, n + 3 .... В то же время пользователь будет иметь роль пользователя на всех уровнях n-1, n-2, n-3 ....
Пример:
user admin admin
Organization < tenants < documents
Это первая часть. Вторая часть - о документах. Допустим, у нас есть несколько атрибутов, таких как publicTenant и publicDocument. Разрешение друг друга на разных уровнях не имеет значения, а также требует знания не только userId, но и уровня, на котором мы работаем, и атрибутов ресурсов, таких как organizationId, tenantId и documentId, для правильного разрешения не только роли пользователя, но и ресурса. атрибуты.
Как это можно правильно реализовать в ABAC? Текущее решение является гибридом с ACL / RBAC / ABAC. ACL и RBAC скрыты в ABAC и используются как атрибуты объекта, но это кажется неправильным.