Это очень поздний ответ, но здесь речь пойдет о будущих поколениях.
Я согласен с sourcedelica , что Apache Shiro - это хорошее место для поиска.Однако, кроме того, я бы рекомендовал вам сделать шаг назад и взглянуть на теорию, стоящую за вашей проблемой.По сути, вы пытаетесь реализовать модель управления доступом на основе ролей с пользователями, группами, ролями и разрешениями.Кроме того, после прочтения вашего вопроса кажется, что у вас есть отношения между пользователями, запрашивающими доступ, и целевыми ресурсами.
Учитывая это, вам нужен ABAC - контроль доступа на основе атрибутов - как определено NISTв их отчете, выпущенном ранее в 2014 году. Вы можете прочитать отчет здесь .
С ABAC вы можете описать своих пользователей в терминах атрибутов - любых атрибутов - таких как роль, местоположение, возраст,гражданство ... Точно так же вы можете описывать ресурсы и объекты таким же образом, как и предпринятые действия и контекст.
Это означает, что с атрибутами и ABAC вы можете легко реализовать следующие требования авторизации:
- пользователь с редактором role == может выполнить действие == edit для ресурсов типа == document, если и только если пользователь находится в том же отделе, что и ресурсы (user.department == resource.department)
- пользователь может выполнить действие == удалить ресурс типа == документ, если и только еслиПользователь владеет документом (user.id == document.owner.id) и, если статус == черновик.
Чтобы реализовать ABAC, используйте XACML .XACML является расширяемым языком разметки контроля доступа, как определено OASIS.Он предоставляет вам:
- схему запроса / ответа (как задавать вопросы и получать решения),
- язык политики (конечно, на основе атрибутов) и
- архитектура.
Google вокруг.Существует множество ресурсов XACML для Java.
Преимущества использования ABAC и XACML заключаются в том, что вы в конечном итоге лишаете свой контроль доступа от своей бизнес-логики, что означает, что вы можете изменять свое приложение независимо от логики авторизации инаоборот.
HTH