Как получить текущую роль пользователя с Spring security plugin?
Я использую плагин spring-security-core в моем приложении grails. Мне нужно знать роль текущего пользователя в действии контроллера. Как я могу это вернуть?
6 ответов
вы можете впрыснуть springSecurityService
на ваш контроллер:
def springSecurityService
и затем в ваши действия, звоните:
def roles = springSecurityService.getPrincipal().getAuthorities()
посмотреть документы здесь.
из контроллера вы можете использовать два метода, которые плагин добавляет в метакласс,getPrincipal
и isLoggedIn
:
def myAction = {
if (loggedIn) {
// will be a List of String
def roleNames = principal.authorities*.authority
}
}
если действие защищено, вы можете пропустить loggedIn
/isLoggedIn()
проверка.
Если вам просто нужно проверить, находится ли пользователь в определенной роли, используйте SpringSecurityUtils.ifAllGranted
который принимает одну строку в качестве аргумента, который содержит список ролей с разделителями-запятыми. Он вернет true, если текущий пользователь принадлежит всем из них. SpringSecurityUtils
также имеет такие методы, как ifAnyGranted
, ifNotGranted
и т. д., Поэтому он должен работать за то, что вы пытаетесь достичь.
чтобы получить пользователя
def springSecurityService
def principal = springSecurityService.principal
String username = principal.username
SecurityContextHolder знает, что:
SecurityContextHolder.getContext().getAuthentication().getAuthorities()
вы также можете использовать getAuthenticatedUser()
сам по себе. Этот метод автоматически впрыснут в каждом регуляторе, и таким образом только доступный от регуляторов. Вам придется использовать один из других методов, если вы хотите получить доступ к текущему зарегистрированному пользователю из любого другого места.