我在我的grails应用程序中使用spring-security-core插件。我需要知道当前用户在控制器操作中的角色。我该如何检索?
答案 0 :(得分:31)
您可以将springSecurityService
注入您的控制器:
def springSecurityService
然后在您的操作中,请致电:
def roles = springSecurityService.getPrincipal().getAuthorities()
请参阅文档here。
答案 1 :(得分:20)
从控制器中,您可以使用插件添加到元类的两种方法getPrincipal
和isLoggedIn
:
def myAction = {
if (loggedIn) {
// will be a List of String
def roleNames = principal.authorities*.authority
}
}
如果操作受到保护,您可以跳过loggedIn
/ isLoggedIn()
检查。
答案 2 :(得分:3)
如果您只是需要检查用户是否处于特定角色,请使用SpringSecurityUtils.ifAllGranted
,它将一个String作为参数,其中包含以逗号分隔的角色列表。如果当前用户属于所有用户,它将返回true。 SpringSecurityUtils
也有ifAnyGranted
,ifNotGranted
等方法,所以它应该适用于你想要完成的任何事情。
答案 3 :(得分:0)
获取用户
def springSecurityService
def principal = springSecurityService.principal
String username = principal.username
答案 4 :(得分:-1)
您也可以单独使用getAuthenticatedUser()
。此方法自动注入每个控制器,因此只能从控制器获得。如果要从其他任何位置访问当前登录用户,则必须使用其他方法之一。