Как ограничить доступ пользователя к определенному действию контроллера? - PullRequest
0 голосов
/ 16 мая 2011
 def filters = {
   loginCheck(controller:'*', action:'*') {
        before = {
           if(!session.user && !session.merchants) 
           {
               redirect(action:'login')
               return false
            }
        }}

Это был мой фильтр для безопасности входа в систему.И ниже находится перехватчик в действии для ограничения пользователя от действия поиска.Но оба не работают.Кто-нибудь может сказать, в чем ошибка?

def beforeInterceptor = [action:this.&checkUser,Only:'search']

    def scaffold = true
    def checkUser() 
    {
        if (session.user)
        {
            redirect(action:"search")
        }
        if(session.merchants)
        {
        redirect(action:"toIndex")
        flash.message="You are not valid user for this action"
        return false
        }   
    }

Ответы [ 2 ]

0 голосов
/ 17 мая 2011

Есть очень приятное сокращение, которое вы можете применить непосредственно к действиям (если вы не используете фильтры):

@Secured(['ROLE_USER'])
def search = {

}

Вы можете дать каждому пользователю ROLE_USER и просто потребовать эту роль.

0 голосов
/ 16 мая 2011

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

class SecurityFilters {
   def filters = {
       loginCheck(controller:'*', action:'*') {
           before = {
              if(!session.user && !actionName.equals('login')) {
                  redirect(action:'login')
                  return false
               }
           }
       }
   }
}

Я работал с этим, и он работал для меня. Что я не уверен, так это о session.merchants в вашем коде. Что это ?

Вы следили за этим:

Чтобы создать фильтр, создайте класс, который заканчивается соглашением Фильтры в каталог grails-app / conf.


Edit: Если вы используете Spring Security, вам не нужно добавлять фильтр или перехватчик. проверьте руководство пользователя: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html

вы можете настроить его с отображением URL или аннотациями.

ех.

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/js/admin/**': ['ROLE_ADMIN'],
   '/someplugin/**': ['ROLE_ADMIN']
]

РЕДАКТИРОВАТЬ 2:

Для входа в систему используйте:

 def authenticateService

...
def action{
     def user = authenticateService.principal() 
     def username = user?.getUsername()
...
...