LINUX.ORG.RU

Как заставить AcegiSecurity работать по bean'у, а не по интерфейсу?


0

0

Добрый день. У меня есть Spring Framework + Acegisecurity.

Сущесвтует интерфейс ru.argo.service.ArrivalPriceService, который реализован 2-мя классами, один из которых ru.argo.service.FreeAccomodationsDAO, второй - ru.argo.service.ArrivalPriceDAO

Мне надо сделать так, чтобы AcegiSecutiry позволял пользователю с ролью ARGO_ONLINE_CLIENT иметь доступ к 1-му (доступен через bean FreeAccomodationService), но не имел доступа ко второму.

Если я делаю так:

ru.argo.service.FreeAccomodationsDAO.*=ROLE_ARGO_ONLINE_CLIENT

в журнале вижу
2009-03-26 12:25:33,973 [http-8084-4] DEBUG org.acegisecurity.intercept.AbstractSecurityInterceptor - Secure object: ReflectiveMethodInvocation: public abstract int ru.argo.service.ArrivalPriceService.getItemCount(); target is of class [ru.argo.service.FreeAccomodationsDAO]; ConfigAttributes: [ROLE_NONE]

То есть, он видит, что это действительно идет обращение к классу ru.argo.service.FreeAccomodationsDAO. но тянет все полномочия из интерфейса ru.argo.service.ArrivalPriceService.

Если я предоствляют доступ к интерфейсу:
ru.argo.service.ArrivalPriceService.*=ROLE_ARGO_ONLINE_CLIENT

доступ имеется, но к обоим классам.

Есть, конечно, еще вариант, ограничения создания bean'а для конкретного пользователя, но я тоже не нашел, как это сделать. Например, можно было бы прописать, что пользователь с ролью argo_online_client имеет право создавать bean FreeAccomodationService, но не имеет права создавать bean по имени ArrivalPriceService. (Имя второго bean'а совпадает с именем интерфейса - так сложилось исторически)


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.