0

我的问题是:在 renderEditor.template 中有什么方法可以知道登录的是什么用户以及他有什么角色?
我想做的事情:在我的应用程序中,当登录用户为管理员(“ROLE_ADMIN”)时,我希望更改一些字段 - 普通用户将只有 html 选择标签 1 个选项,默认情况下选中,当管理员用户登录时,出现所有用户的列表。

我正在使用 Spring Security Plugin + Grails 2.1.1。

我已经尝试过的:

  1. 添加 Spring Security Service ( def springSecurityService) 但它始终为空
  2. 尝试传递布尔参数 - 无效

任何帮助将不胜感激!

编辑非常感谢您的回答。但是,我的问题不够精确,所以我包含了一些伪代码,可以更好地解释我想要实现的目标(renderTemplate.template 中的方法)

private renderManyToOne(domainClass,property) {
        if (property.association) {
            def sb = new StringBuilder()
            sb << '<g:select'
            ...
            if (/*loged user is admin*/) {
                sb << ' from="${' << property.type.name << '.list()}"'
            }else{
                sb << ' from="${user}"'/*only loged user can be selected*/
            }
            ...
            sb << '/>'
            sb as String
        }
    }
4

2 回答 2

0

有一个带有弹簧安全性的标签库 http://grails-plugins.github.com/grails-spring-security-core/docs/manual/guide/6%20Helper%20Classes.html#6.1%20SecurityTagLib

在我的应用程序中,我这样使用它:

<ul>
<sec:access expression="hasRole('ROLE_ADMIN')">
    <li><a href="#newFeedModal" role="button">Add New Feed</a></li>
</sec:access>
</ul>
于 2012-12-03T22:42:09.280 回答
0

renderEditor.template不是使用通常的 GSP 模板引擎呈现的。它是用一个标准渲染的SimpleTemplateEngine,只有几个简单的绑定。但是,此模板的输出随后会使用 GSP 模板引擎呈现。这相当令人困惑,但您可以renderEditor.template输出 GSP 代码。例如:

<%  if (property.type == Boolean || property.type == boolean)
        out << renderBooleanEditor(domainClass, property)
    else ...
    else if (property.type == String && domainInstance == 'specialField') {
        out << '''<g:if test="${org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')}">'''
        out << renderStringEditor(domainClass, property)
        out << '''</g:if>'''
        out << '''<g:else>'''
        out << renderStringSelectEditor(domainClass, property)
        out << '''</g:else>'''
    }
    ...
于 2012-12-03T23:05:40.147 回答