Apache Shiro решает, какую роль использовать после входа в систему - PullRequest
0 голосов
/ 18 мая 2018

У меня есть существующий устаревший проект, который построен на основе 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"permissions.

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

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

Спасибо всем за потраченное время.

1 Ответ

0 голосов
/ 20 мая 2018

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

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

простейшая реализация AuthorizationInfo - это SimpleAuthorizationInfo.

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

...