Spring Security是否有'hasAllRole'执行'hasAnyRole'的AND版本

时间:2011-11-01 17:04:11

标签: spring grails spring-security spring-el

我在Grails中使用Spring Security来限制对我的控制器的访问。我有一个用例,我想检查用户是否分配了多个角色。我意识到我可以创建另一个与“人有这两个角色”同义的角色,但这需要比我想要的更多变化。

Spring Security有一个OR版本expression来检查用户是否有任何角色列表:

//allow user to access if he has role ROLE_ADMIN -OR- ROLE_USER
//note this is shortcut notation for hasAnyRole(["ROLE_ADMIN","ROLE_USER"])
@Secured(["ROLE_ADMIN","ROLE_USER"])
def index = {}

是否有方法,或只是使用Spring Expression Language (SpEL)来执行以下操作:

//allow user to access if he has role ROLE_ADMIN -AND- ROLE_USER
@Secured("hasAllRole(['ROLE_ADMIN','ROLE_USER']")
def index = {}

注意:SpringSecurityUtils类确实有方法

public static boolean ifAllGranted(final String roles)

3 个答案:

答案 0 :(得分:3)

hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')

无法简化

答案 1 :(得分:2)

如果您使用@PreFilter代替@Secured,那么您可以写:

@PreFilter("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')")

答案 2 :(得分:1)

你可以不hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')吗?