Подтвердить что ты не робот

Как получить текущую роль пользователя с плагином безопасности spring?

Я использую плагин spring -security-core в моем приложении grails. Мне нужно знать текущую роль пользователя в действии контроллера. Как я могу получить это?

4b9b3361

Ответ 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() самостоятельно. Этот метод автоматически вводится в каждый контроллер и, следовательно, доступен только от контроллеров. Вам нужно будет использовать один из других методов, если вы хотите получить доступ к текущему зарегистрированному пользователю из любого места.