2012-06-25 1 views
0

В моей системе у меня есть множество ролей, назначенных пользователям (давайте предположим 3 на данный момент ROLE_ADMIN, ROLE_USER, ROLE_SERVICES). В одном из моих контроллеров (допустим, SearchController, что у нас есть три действия serviceIndex{}, userIndex{} and adminIndex{}), я хочу, чтобы пользователи любой роли могли иметь доступ к двум действиям (первые два). Для окончательного действия я хочу ограничить действие против пользователя одного типа ролей (скажем, ROLE_USER), но разрешить доступ к пользователям других ролей (то есть до ROLE_ADMIN, ROLE_SERVICE. В таблице requestmap у меня есть что-то вроде следующего:Ошибка конфигурирования requestmap в весеннем ядре безопасности для grails

config_attribute ------------------------------------------------ -----------> url
ROLE_ADMIN, ROLE_SERVICE, ROLE_USER ------------------------------ >/search/serviceIndex
ROLE_ADMIN, ROLE_SERVICE, ROLE_USER ------------------------------->/search/userIndex
ROLE_ADMIN, ROLE_SERVICE ----------------------------------------->/search/adminIndex

Поскольку в третьем правиле указано, что url '/ search/adminIndex' недоступен для ROLE_USER, пользователю с этой ролью должно быть отказано в авторизации для доступа к URL-адресу. Но пользователь может получить доступ к URL-адресу. Какова правильная конфигурация. Я попробовал что-то вроде /search/adminIndex/**, но это тоже не работает. С другой стороны, ни один из URL-адресов еще не имеет суффиксов, но я все равно хотел бы предотвратить доступ, если бы пользователи манипулировали URL-адресом, например, добавляя суффиксы, например, /search/userIndex/56a.

С уважением, dipess

ответ

1

Поскольку плагин перебирает правил и применяет первый, который соответствует текущему URL, я бы установить adminIndex первый, а затем иметь Catchall для чего-нибудь еще.

ROLE_ADMIN,ROLE_SERVICE   /search/adminIndex 
ROLE_ADMIN,ROLE_SERVICE,ROLE_USER /search/** 
+0

Даже если вы правы, эта логика кажется ошибочной, потому что каждый URL-адрес отличается. Я действительно не понимаю, почему текущая конфигурация OPs не должна работать. – Gregg

+0

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