2012-12-03 54 views
0

我的問題是:它有什麼辦法,在renderEditor.template知道用戶登錄和他有什麼角色?
我想要做的事情:在我的應用程序中,當我登錄的用戶是admin(「ROLE_ADMIN」)時,我希望進行一些字段更改 - 正常用戶將擁有html選擇標籤,只有1個選項,默認情況下會選中,在,所有用戶的列表中出現。
任何方式來知道什麼用戶登錄renderEditor.template

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

我已經嘗試過:

  1. 添加春季安全服務(def springSecurityService),但它總是空
  2. 試圖通過boolean變量 - 不影響

任何幫助將不勝感激!

編輯非常感謝您的回答。不過,我的問題是不是一種高精度不夠,所以我有一些僞代碼,也許更好的解釋我想實現(從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 
     } 
    } 

回答

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>''' 
    } 
    ... 
相關問題