Как использовать Grails Spring Security Plugin, чтобы требовать входа в систему перед доступом к действию? - PullRequest
0 голосов
/ 18 января 2011

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

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

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

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

Я хочу обработать какthis:

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

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

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

Ответы [ 4 ]

1 голос
/ 19 января 2011

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

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

1 голос
/ 18 января 2011

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

1 голос
/ 18 января 2011

Не знаю о Grails, но Spring Security имеет параметр spring-security-redirect, который можно использовать для перенаправления пользователя на указанный URL-адрес при успешной аутентификации.

0 голосов
/ 19 января 2011

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

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

    session.post_id = 8

  3. Перенаправить пользователя к действию Login Controller / Auth.

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