我在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)
答案 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')
吗?