Контроль разрешений с помощью apache shiro

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

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

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

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

currentUser.isPermitted( "resource:delete" );

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

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

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

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

Теперь, как заставить Широ работать в этом костюме?


person hguser    schedule 19.06.2013    source источник


Ответы (2)


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

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

person rvini    schedule 19.06.2013
comment
Как насчет того, чтобы пользователь получил URL-адрес удаления для одного ресурса, даже если у него нет разрешения? - person hguser; 19.06.2013
comment
Вы можете добавить проверку разрешения на удаление на стороне сервера. - person rvini; 19.06.2013
comment
balusc.blogspot. in/2013/01/ — проверьте, будет ли полезна эта ссылка, есть пример создания области jdbc в файле конфигурации и динамической передачи данных в запрос для проверки разрешения. я не работал над этим ты - person rvini; 19.06.2013

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

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

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

Надеюсь, что это дает вам некоторые идеи.

person David George    schedule 06.09.2014