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