Защитите некоторые, но не все страницы в приложении Grails с помощью плагина Shiro.

Возможно, это только я, но мне сложно понять, как защитить только некоторые страницы в приложении Grails с помощью подключаемого модуля Shiro.

Я использую это в своем фильтре безопасности:

class SecurityFilters {
  def filters = {
    all(uri: "/**") {
      before = {
        // Ignore direct views (e.g. the default main index page).
        if (!controllerName) return true

        // Access control by convention.
        accessControl ( auth:false)
      }
    }
  }
}

и я создал пользователя в своей начальной загрузке:

    def adminRole = new Role(name: "Administrator")
    adminRole.addToPermissions("secured1")
    adminRole.addToPermissions("secured2:create,save,edit,update")
    adminRole.save()

    def user = new User(username: "admin", passwordHash: new Sha512Hash("***").toHex())
    user.addToRoles Role.findByName('Administrator')
    user.save()

и это работает. Проблема в том, что он также защищает все контроллеры / действия.

Я надеялся, что можно НЕ указывать действия, которые я хочу защитить, в моем SecurityFilter, а только в разрешениях .. Но возможно ли это?


person sbglasius    schedule 05.02.2010    source источник


Ответы (1)


Статическое свойство «фильтр» позволяет определять несколько шаблонов фильтрации. Вы можете использовать параметр uri или параметр controller. Если вы используете «контроллер», вы также можете добавить параметр «действие». Каждый из этих параметров принимает регулярное выражение, поэтому вы можете делать что-то вроде:

admin(uri:"/admin/**")
...
browseStore(controller:"store", action:"(show|list)")
...
shopStore(controller:"store", action:"*")
...

Посетите http://www.grails.org/Filters для получения дополнительной информации.

person Brandon    schedule 05.02.2010
comment
Верно, но я думал, что я могу определить это в addToPermissions для роли, поэтому мне не нужно делать это в SecurityFilter. Но спасибо за ваш вклад - person sbglasius; 05.02.2010
comment
Фильтры - это то место, где происходит контроль доступа. Если у вас есть какая-то магия, которая позволяет вам применять контроль доступа путем создания разрешения, поделитесь им. Здесь обсуждаются разрешения с использованием подстановочных знаков: grails.org/plugin/shiro Обратите внимание, что даже если Разрешения с подстановочными знаками могут выглядеть аналогично макету controller: action: id, который вы привыкли использовать в MVC, но при использовании плагина grails shiro между ними нет никакой связи. - person Brandon; 05.02.2010
comment
Привет, Брэндон: Я знаю, что SecurityFilters необходимы, но я не хочу писать несколько из них. Только один и обрабатывает остальные разрешения из таблиц пользователей и ролей. - person sbglasius; 08.02.2010
comment
Однако я признаю ваш ответ действительным :-) - person sbglasius; 08.02.2010