2013-06-19 4 views
1

Я новичок в apache shiro, и я прочитал почти 60% учебников на странице apache siro.Контроль доступа с использованием apache shiro

Это прекрасная инфраструктура, однако мне интересно, может ли она соответствовать моим требованиям.

Меня интересует аутентификация на основе разрешений.

Например, чтобы убедиться, если пользователь имеет разрешение на удаление ресурсов, мы можем использовать это:

currentUser.isPermitted("resource:delete"); 

Однако в нашем приложении, даже пользователь имеет разрешение на удаление ресурсов, он может только удалите некоторые определенные ресурсы, а не все из них.

Например, для ресурса есть ресурс с именем createdby, чтобы записать того, кто создает этот ресурс.

Теперь пользователь может удалить только созданные им ресурсы, если у него есть разрешение resouce:delete.

Фактически, ресурсы, которые могут быть удалены пользователем (которые прошли проверку подлинности и имеют разрешение delete), будут вычисляться с помощью большего количества ограничений.

Теперь, как сделать работу в этом стиле?

ответ

0

Из-за того, что я исследовал Сиро, я не думаю, что он дает такую ​​гибкость, чтобы иметь индивидуальный чек. Он в основном функционирует на основе ролей и разрешений, определенных в файле конфигурации.

Для этой функции я предлагаю вам отображать только те записи, которые пользователю разрешено удалять, с помощью этой проверки на уровне выборки запроса. (или) добавить условие на уровне пользовательского интерфейса, не отображать кнопку удаления, если зарегистрированный пользователь такой же, как и созданный. Это всего лишь предложение.

+1

Как насчет того, если пользователь получит URL-адрес удаления для одного ресурса, даже если у него нет разрешения? – hguser

+0

Вы можете добавить проверку разрешения на удаление на стороне сервера. – rvini

+0

http://balusc.blogspot.in/2013/01/apache-shiro-is-it-ready-for-java-ee-6.html - Проверьте, будет ли эта ссылка полезна, есть пример создания jdbc realm в файле конфигурации и динамически передавать данные в запрос для проверки разрешения. Я не работал над этим – rvini

3

Вы можете сделать это в Сиро, но вам нужно будет написать код. Либо создайте подкласс Authorizer и введите его в диспетчер безопасности, либо создайте подкласс одного из классов областей, таких как JdbcRealm. Затем переопределите метод isPermitted. Для этого вам потребуется доступ к вашей модели разрешений, например таблице базы данных или документу в базе данных NoSQL.

Ваш вызов isPermited должен указать ресурс, который вы удаляете, чтобы вы могли его просмотреть в своем переопределенном методе.

Если переопределить метод isPermitted в подклассе AuthorizingRealm вы будете иметь доступ к авторизованы принципалам пользователя и Роли пользователя: это дает совсем немного гибкости, потому что вы можете иметь говорит: пользователь (принципал) Фред с ролями: менеджер, администратор. Затем ваша модель разрешений может решить, может ли Fred, менеджер или администратор выполнить задачу на указанном ресурсе.

Надеюсь, что дает вам несколько идей.

Смежные вопросы