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