检查特定用户是否有角色

时间:2009-12-02 15:41:11

标签: security spring grails spring-security

是否有一些很好的方法来检查某个特定用户(不是登录的用户)是否具有某些特定角色?

这是grails示例(对于普通Java通常是相同的但是语法):

def user = User.get(1) //Get user with id 1
if (ifAnyGranted(user,"ROLE_ADMIN")) { //This is the line I need to implement somehow
...
}

提前致谢。

4 个答案:

答案 0 :(得分:9)

我假设,您的用户域类拥有对您的Role类的hasMany引用,如下所示:

class User  {
    static hasMany = [authorities: Role]
    //....
}
class Role  {
    static belongsTo = User
    String description
    String authority
    //....
}

所以你的角色检查代码很简单:

User user = User.get(1)
if (user.authorities.any { it.authority == "ROLE_ADMIN" }) {
    // user is a admin
}

可以找到更新的答案here

答案 1 :(得分:4)

if (grails.plugin.springsecurity.SpringSecurityUtils.ifAllGranted("ROLE_ADMIN"))
{
   ...
}

答案 2 :(得分:3)

如果您正在使用Spring Security插件并想要检查当前登录的用户:

import org.codehaus.groovy.grails.plugins.springsecurity.AuthorizeTools

. . .

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){
               //user is an admin
}

答案 3 :(得分:0)

我想检查当前登录的用户,你不需要查询用户域,因为你已经注入了springSecurityService,所以你可以只写:

def springSecurityService

def someAction(){
    if (principal.authorities.any { it.authority == 'ROLE_ADMIN'}){
        //...
    } else {
        //...
    }
}