Apache Shiro решает, какую роль использовать после входа в систему

У меня есть существующий унаследованный проект, созданный с использованием Spring 3 и Apache Shiro для аутентификации и авторизации. Он использует область JDBC.

У нас реализована авторизация с разрешениями, назначенными властям, а полномочия - пользователям.

Сценарий такой:

  • use1: fooRole, barRole

  • fooRole: foo.permission.1, foo.permission.2

  • barRole: bar.permission.1, bar.permission.2

Меня попросили войти в систему с помощью «user1» и после входа выбрать, с какой ролью «user1» хочет работать. Например:

  1. Правильный логин user1
  2. выберите fooRole или barRole
  3. выберите fooRole и теперь работайте с разрешениями "foo.permission.1, foo.permission.2".

Согласно архитектуре Сиро в моем приложении у меня есть «Тема», доступная только для чтения. И менеджер по безопасности получает информацию из моей базы данных. Я могу проверить, есть ли у субъекта определенная роль или разрешение. Но как только я вошел в систему, я не вижу способа изменить роли пользователей в теме.

Я думаю, что Apache Shiro работает не так, и, возможно, это не лучшая практика, но в любом случае: Есть ли у кого-нибудь из вас идея явно выбрать одну из назначенных ролей для работы только в Apache Shiro?

Спасибо всем за ваше время.

2
0
426
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете изменить разрешения пользователя во время выполнения. По этому поводу ведется обсуждение здесь. Это то, что вы должны делать в настраиваемой области Широ, поскольку это единственное место, где у вас есть доступ к AuthorizationInfo по дизайну. AuthorizationInfo хранит данные авторизации, такие как разрешения и роли, представленные одним субъектом. За пределами вашей области нет геттеров и сеттеров для субъекта, который мог бы назначать роли и разрешения. Вы всегда можете проверить:

  • если у субъекта есть разрешение: SecurityUtils.getSubject().isPermitted();
  • если субъект играет роль: SecurityUtils.getSubject().hasRoles();

Самая простая реализация AuthorizationInfo - SimpleAuthorizationInfo.

ИМХО это плохая практика по многим причинам. Широ создан не для этого.

Спасибо, это мне очень помогает. И я согласен.

Garci García 24.05.2018 16:04

Почему это плохая практика по многим причинам? Единственная причина, по которой я вижу, заключается в том, что Shiro не был разработан с учетом стандартного RBAC - активация и деактивация ролей в сеансе была фундаментальной концепцией RBAC с середины 90-х годов и находится в стандарте ANSI / NIST. Это должно быть хорошо практика по многим причинам!

drrob 09.12.2019 07:40

Другие вопросы по теме