Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как это сделать в Acegi? 
:(
    Опции темы
GeekSmiles
Дата 19.4.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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, ...) для своего пользователя в базе данных - будет ли это правильным решением или какое решение использовать?


PM MAIL   Вверх
Zamuta
Дата 19.4.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



GeekSmiles, выбирая acegisecurity вы получите хорошую гибкость и масштабируемость вашего приложения, но не надейтесь что всё сделаете быстро. 

Цитата
Задача - сделать этот с помощью Acegi так, чтобы при большом кол-ве пользователей приложение не "упало":

Всё правильно напишете, не упадёт. 
Цитата
ведь если для каждого вошедшего пользователя вычитаются все права ко всем сервисам и будут храниться в памяти - не хорошо.

acegi юзает ehcache, там уже настроите  хранить юзеров в памяти или на диске, как долго и как:
Цитата
diskSpoolBufferSizeMB:
    This is the size to allocate the DiskStore for a spool buffer. Writes are made
    to this area and then asynchronously written to disk. The default size is 30MB.
    Each spool buffer is used only by its cache. If you get OutOfMemory errors consider
    lowering this value. To improve DiskStore performance consider increasing it. Trace level
    logging in the DiskStore will show if put back ups are occurring. 

    memoryStoreEvictionPolicy:
    Policy would be enforced upon reaching the maxElementsInMemory limit. Default
    policy is Least Recently Used (specified as LRU). Other policies available -
    First In First Out (specified as FIFO) and Less Frequently Used
    (specified as LFU)


Acegi Reference полезная вещь, но мне ещё понравилось как написано в Spring in Action (Second edition) 13 глава, как раз вместе со Sping fmw.
Цитата
Я так понимаю, что я могу ко всем своим сервисам подцепить Interceptor и при обращении к сервису проверять допустимые действия (view, edit, delete, ...) для своего пользователя в базе данных - будет ли это правильным решением или какое решение использовать?

Можно и так. Но если используете ещё jsf, то для этих целей есть acegi-jsf , т.е. в зависимости от роли будут или не будут отображаться элементы управления на странице. 


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.