![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| GeekSmiles |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 18.4.2008 Репутация: нет Всего: нет |
В нашем приложении такая архитектура:
Есть большое кол-во сервисов и пользователей. У каждого сервиса для каждого пользователя могут быть следующие права доступа: view, edit, delete, ... Для любого пользователя могут встречатся абсолютно разные комбинации прав к сервису, к примеру: view + edit, view + delete, view + delete + edit + .... Задача - сделать этот с помощью Acegi так, чтобы при большом кол-ве пользователей приложение не "упало": ведь если для каждого вошедшего пользователя вычитаются все права ко всем сервисам и будут храниться в памяти - не хорошо. Я начал изучать Acegi Reference, чтобы понять как имплементировать, чтобы именно при конкретном обращении пользователя к сервису проверять в базе данных наличие прав. Рассмотрев в референсе способ Chapter 21. Secure Object Implementations пришел к заключению что он Role based. А в моем случае Role based не подходит - т.к. комбинаци view, edit, delete ... для каждого сервиса у каждого пользователя могут быть разные - это будет очень очень много ролей. Смотрел ещё на Chapter 22. Domain Object Security (ACL). Там пишут Instead, security decisions need to comprise both who (Authentication), where (MethodInvocation) and what (SomeDomainObject). In other words, authorization decisions also need to consider the actual domain object instance subject of a method invocation. т.е. насколько я понял ACL подход для того, чтобы разграничить доступ к объекту одного и того же класса для разных пользователей - но у меня много разных объектов разных классов - т.е. сервисы, поэтому, как я понимаю, этот вариант не подходит. Смотрел ещё статью по Acegi http://www-128.ibm.com/developerworks/java...2&S_CMP=ART там пишут про Proxy: к объекту цепляется Interceptor. Я так понимаю, что я могу ко всем своим сервисам подцепить Interceptor и при обращении к сервису проверять допустимые действия (view, edit, delete, ...) для своего пользователя в базе данных - будет ли это правильным решением или какое решение использовать? |
|||
|
||||
| Zamuta |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
GeekSmiles, выбирая acegisecurity вы получите хорошую гибкость и масштабируемость вашего приложения, но не надейтесь что всё сделаете быстро.
Всё правильно напишете, не упадёт.
acegi юзает ehcache, там уже настроите хранить юзеров в памяти или на диске, как долго и как:
Acegi Reference полезная вещь, но мне ещё понравилось как написано в Spring in Action (Second edition) 13 глава, как раз вместе со Sping fmw.
Можно и так. Но если используете ещё jsf, то для этих целей есть acegi-jsf , т.е. в зависимости от роли будут или не будут отображаться элементы управления на странице. -------------------- Thank you opensource. |
||||||||
|
|||||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |