使用SpringSecurity的Grails,检查当前用户是否可以访问控制器/操作

Jan*_*Jan 8 grails spring-security

我正在为我的应用程序开发一个菜单,它应该只能显示当前用户可以访问的控制器(数据库中定义的请求映射).

如何检查当前用户是否可以访问特定的控制器和操作?

Tha*_*wda 7

在视图中检查角色:Spring安全插件提供ifAllGranted,ifAnyGranted,ifNoneGranted等标签来检查角色

例如,要检查登录用户的管理员角色:

<sec:ifLoggedIn>
    <sec:ifAllGranted roles="ROLE_ADMIN">
        Admin resource
     </sec:ifAllGranted>
</sec:ifLoggedIn>
Run Code Online (Sandbox Code Playgroud)

(在grails-2.2.2和springSecurityCorePlugin-1.2.7.3中测试)

  • ......然后就是`<sec:ifAnyGranted roles ="ROLE_ADMIN,ROLE_SUPER_ADMIN">` (2认同)

小智 0

您必须配置文件 config/SecurityConfig.groovy (如果它不存在,请创建它,这会覆盖默认的安全配置)

添加此条目:

requestMapString = """\
            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT
            /=IS_AUTHENTICATED_REMEMBERED
            /login/auth=IS_AUTHENTICATED_ANONYMOUSLY
            /login/authajax=IS_AUTHENTICATED_ANONYMOUSLY
            /login/authfail=IS_AUTHENTICATED_ANONYMOUSLY 
            /js/**=IS_AUTHENTICATED_ANONYMOUSLY
            /css/**=IS_AUTHENTICATED_ANONYMOUSLY
            /images/**=IS_AUTHENTICATED_ANONYMOUSLY
            /plugins/**=IS_AUTHENTICATED_ANONYMOUSLY
            /**=IS_AUTHENTICATED_REMEMBERED
          """
Run Code Online (Sandbox Code Playgroud)

这意味着您必须登录才能进入该网站。但所有资源(css、js、图像等)都是在未经身份验证的情况下访问的。

如果您只需要特定角色,请输入特定控制器:例如,对于 UserController:

    /user/**=ROLE_ADMIN
    /role/**=ROLE_ADMIN 
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:http://www.grails.org/AcegiSecurity+Plugin+-+Securing+URLs

问候