То, что вы ищете, называется abac aka Управление доступом на основе атрибутов.Это эволюция RBAC как модели контроля доступа.В RBAC вы определяете управление доступом в терминах ролей, групп и, возможно, разрешений.Затем вам нужно написать код в вашем приложении, чтобы понять роли и группы.Это называется управление доступом на основе идентичности .
В ABAC появилось 2 новых элемента:
- атрибуты, которые являются обобщением групп и ролей.Атрибуты представляют собой пару ключ-значение, которая может описывать кого угодно и что угодно.Например,
department
, member
и action
являются атрибутами. - политики связывают атрибуты вместе, чтобы определить, следует ли предоставить доступ или запретить.Политика - это дружественный для человека способ выражения авторизации.Вместо того чтобы писать собственный код в своем приложении, вы пишете политику, которой можно централизованно управлять и повторно использовать в приложениях, базах данных и API.
Существует несколько языков ABAC, таких как xacml и альфа .Используя ALFA, я мог бы написать следующую политику:
- Пользователю будет разрешено добавить нового члена команды в отдел A
- В отдел B ему разрешено толькопросмотреть список команд
- В других отделах он вообще не имеет доступа.
- Роли также должны быть наследуемыми, храниться в модели, управляемой через интерфейс.
policyset appAccess{
apply firstApplicable
policy members{
target clause object = "member"
apply firstApplicable
/**
* A user can add a member to a department if they are a manager and if they are assigned to that department.
*/
rule addMember{
target clause role == "manager" and action == "add"
permit
condition user.department == target.department
}
}
}
Одним из ключевых преимуществ ABAC является то, что вы можете разрабатывать столько политик, сколько захотите, проводить аудит, делиться ими и вообще не трогать код своего приложения.потому что вы заканчиваете экстернализацию авторизации.
Существует несколько механизмов / проектов, которые реализуют ABAC, таких как:
- AuthZForce (библиотека Java для авторизации XACML)
- Axiomatics Policy Server (коммерческий продукт - отказ от ответственности: я там работаю)
- AT & T XACML