2013-09-03 3 views
1

Мы используем плагин весной безопасности Grails:Изменение AccessDecisionManager к UnanimousBased в Grails Spring Security Plugin

http://grails.org/plugin/spring-security-core

Я просто хочу, чтобы изменить менеджер решения доступа по умолчанию из умолчанию AffirmativeBased в UnanimousBased. Я не вижу, что документально нигде в руководстве плагина:

http://grails-plugins.github.io/grails-spring-security-core/docs/manual/

Кто-нибудь знает, если это возможно, чтобы изменить это?

Я добавил еще одного избирателя, «myVoter», который обнаружен и работает нормально.

grails.plugins.springsecurity.voterNames = [ 
    'myVoter', 'authenticatedVoter', 'roleVoter', 
] 
+0

Вы когда-нибудь получали ответ? У меня такой же вопрос. – Ken

+0

Я так не верю. Весенняя безопасность оказалась плохо подходящей для нашей модели контроля доступа. Мы закончили свой собственный. – nogridbag

ответ

0

Основываясь на Burt Беквит в «Взлом Grails Spring Security Plugin» [http://www.slideshare.net/gr8conf/hacking-the-grails-spring-security-plugins], это должно быть возможно просто предоставить другую реализацию компонента AccessDecisionManager. Что-то вроде этого:

AccessDecisionManager (org.springframework.security.access.vote.UnanimousBased)

в resources.groovy

Когда я попробовал это, у меня были проблемы с синтаксисом конструктора в определении боба , Менеджер решения доступа хочет получить список избирателей в конструкторе, и я не мог процитировать, как получить мои избиратели, определенные в config.groovy как параметры для конструктора. Я собирался вывести свой собственный диспетчер решений (без параметров) из UnanimousBased, когда я наткнулся на исходный код AuthenticatedVetoableDecisionManager в плагине Spring Spring Security. Этот класс разбивает избирателей пополам ... все, что происходит от AuthenticatedVoter, немедленно выйдет из строя, если кто-либо откажется (например, семья AUTHENTICATED_FULLY), но все остальные избиратели пройдут, если они будут предоставлены (например, RoleVoter). Мне нужна функция AuthenticatedVoter для моего пользовательского избирателя, поэтому я просто получил от AuthenticatedVoter (чтобы переопределить все методы интерфейса, чтобы я случайно не получил функциональность базового класса) и застрял с менеджером решений по умолчанию.