У меня есть существующий унаследованный проект, созданный с использованием Spring 3 и Apache Shiro для аутентификации и авторизации. Он использует область JDBC.
У нас реализована авторизация с разрешениями, назначенными властям, а полномочия - пользователям.
Сценарий такой:
use1: fooRole, barRole
fooRole: foo.permission.1, foo.permission.2
barRole: bar.permission.1, bar.permission.2
Меня попросили войти в систему с помощью «user1» и после входа выбрать, с какой ролью «user1» хочет работать. Например:
Согласно архитектуре Сиро в моем приложении у меня есть «Тема», доступная только для чтения. И менеджер по безопасности получает информацию из моей базы данных. Я могу проверить, есть ли у субъекта определенная роль или разрешение. Но как только я вошел в систему, я не вижу способа изменить роли пользователей в теме.
Я думаю, что Apache Shiro работает не так, и, возможно, это не лучшая практика, но в любом случае: Есть ли у кого-нибудь из вас идея явно выбрать одну из назначенных ролей для работы только в Apache Shiro?
Спасибо всем за ваше время.
Вы можете изменить разрешения пользователя во время выполнения. По этому поводу ведется обсуждение здесь. Это то, что вы должны делать в настраиваемой области Широ, поскольку это единственное место, где у вас есть доступ к AuthorizationInfo по дизайну. AuthorizationInfo хранит данные авторизации, такие как разрешения и роли, представленные одним субъектом. За пределами вашей области нет геттеров и сеттеров для субъекта, который мог бы назначать роли и разрешения. Вы всегда можете проверить:
SecurityUtils.getSubject().isPermitted();SecurityUtils.getSubject().hasRoles();Самая простая реализация AuthorizationInfo - SimpleAuthorizationInfo.
ИМХО это плохая практика по многим причинам. Широ создан не для этого.
Почему это плохая практика по многим причинам? Единственная причина, по которой я вижу, заключается в том, что Shiro не был разработан с учетом стандартного RBAC - активация и деактивация ролей в сеансе была фундаментальной концепцией RBAC с середины 90-х годов и находится в стандарте ANSI / NIST. Это должно быть хорошо практика по многим причинам!
Спасибо, это мне очень помогает. И я согласен.