2011-01-18 1 views
0

Я знаю, что я могу использовать аннотацию или сопоставление запроса, чтобы ограничить доступ к ACTION определенными ROLES. Но теперь у меня другое обстоятельство.Как использовать плагин Grails Spring Security для входа в систему перед доступом к действию?

Мой сценарий: каждый пользователь моего сайта может создавать сообщения, и они могут сделать свой собственный пост общедоступным, приватным или доступным только для других пользователей. Я реализую совместное использование таблицы базы данных PERMISSION, которая указывает, имеет ли пользователь право просматривать сообщение или нет.

Проблема заключается в том, что, когда клиент получает доступ к почте через прямую ссылку, как я могу определить, у него/нее есть привилегия для ее просмотра? Там в 3 обстоятельства:

  1. Сообщение общественности, поэтому он может быть просмотрен любым (в том числе не-логин пользователя)
  2. Пост является частным, поэтому только Войти владелец может просмотреть его
  3. Сообщение делится, это означает, что только пользователь-пользователь, который является общим, и владелец может его просмотреть.

Я хочу, чтобы обрабатывать как это:

  1. Если запрашиваемое сообщение является публичной: ок.
  2. Если запрашиваемая должность закрыта/доступна: я хочу перенаправить пользователя на страницу входа; после регистрации , пользователь будет перенаправлен на страницу, которую хочет видеть.

Проблема здесь заключается в том, что я могу перенаправить пользователя для входа контроллер/действие аутентификации, но после того, что я не знаю, как перенаправить его обратно. Ссылка на каждый пост отличается post_id, поэтому я не могу использовать SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl

Может ли кто-нибудь знать способ сделать это?

ответ

0

Я нашел быстрый обходной путь для решения этой проблемы:

  1. Если пользователь вошел в систему: проверить привилегии пользователя, и возвращает соответствующий результат.
  2. Если пользователь не вошел в систему: На вид действия, установить post_id по:

    session.post_id = 8

  3. переадресовать пользователя к действию Войти Контроллер/Авт.

  4. При выполнении checkrol (это мой grails.plugins.springsecurity.successHandler.defaultTargetUrl в Config.groovy), если существует session.post_id, используйте его для создания ссылки для перенаправления на действие вида. Перед перенаправлением очистите session.post_id.
1

Dunno о grails, но весенняя безопасность имеет параметр spring-security-redirect, который может использоваться для перенаправления пользователя на указанный URL при успешной аутентификации.

+0

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

1

Я думаю, вы могли бы добавить свой собственный фильтр, который будет выполнен до того, как будет вызвано действие, и выполните проверку разрешений для сообщений там. Вы можете найти более подробную информацию о Grails Filters here.

+0

Я сейчас нахожусь в GrailsFilter. Надеюсь, это сработает :) –

+0

@ Hoàng, отлично, дайте мне знать, как это происходит. :-) – Maricel

+0

, но после перенаправления, как я могу вернуться к предыдущему действию? –

1

Вы посмотрели плагин ACL Grails Spring Security? Я не знаю, это очень хорошо, но он предназначен для ограничения доступа к определенным случаям:

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

+0

спасибо за рекомендацию. На самом деле, я зашел слишком далеко, чтобы вернуться и использовать другой плагин. Может быть, я посмотрю на него для последующего проекта –

Смежные вопросы