Grails中如何使用acegi requestmap 進行動態(tài)配置權限

            考慮到權限應該可以由用戶自行分配,所以靜態(tài)的requestmap 和 controller annotations 的方法都不太合適。因此使用動態(tài)的requestmap,于是出現(xiàn)了一些小問題,如本文所描述:

          1. 安裝acegi plugin

          2. acegi的一些概念以及用法參考
          http://grails.org/plugin/acegi
          http://www.infoq.com/cn/articles/grails-acegi-integration

          3. 問題
            在grails中,默認生成的show.gsp中是使用一個form帶多個參數(shù)來提交,比如?_action_Edit=edit 或者 ?_action_Delete=delete,
          但對于requestmap,它實際是對于url進行限制的,并沒有對參數(shù)做限制,所以這時候 grails提交的action就不會被requestmap檢測到。

          4. 方案
           
             requestmap權限分配機制類似如下,這里只是demo。
             實際中,可以在UI界面上通過使用checkbox來代替該requestmap的URI string,完成對role進行權限的分配。
           
           1 def projectListMap = new Requestmap(
           2                      url: '/project/list**',
           3                      configAttribute: 'ROLE_USER, ROLE_ADMIN'
           4              )
           5              projectListMap.save()
           6              
           7              
           8 def projectCreateMap = new Requestmap(
           9                      url: '/project/create**',
          10                      configAttribute: 'ROLE_ADMIN'
          11              )
          12              projectCreateMap.save()
          13              
          14 def projectEditMap = new Requestmap(
          15                      url: '/project/edit**',
          16                      configAttribute: 'ROLE_ADMIN'
          17              )

            采用原生的html form代替grails的actionSubmit,顯示的提交url,比如
            使用
          1       <form action="/todolist/project/edit">
          2         ..
          3       </form>
          4       <form action="/todolist/project/delete" method="post" >
          5         ..
          6       </form>
               
          代替原來的     
                       
          1 <g:form>
          2    <g:hiddenField name="id" value="${projectInstance?.id}" />
          3   <span class="button"><g:actionSubmit class="edit" action="edit" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></span>
          4   <span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span>
          5 </g:form>

                 
           4.參考
          http://grails.1312388.n4.nabble.com/acegi-requestmap-how-to-inspect-URL-parameters-td1382988.html

          5. 關于這種方式,有一些缺點,就是使用原來的方式可以繞開requestmap的限制,具體請看
          http://grails.1312388.n4.nabble.com/Unexpected-observations-using-spring-security-acegi-plugin-td1349785.html






          posted on 2010-06-30 15:05 想飛就飛 閱讀(1656) 評論(0)  編輯  收藏 所屬分類: J2EE

          公告


          導航

          <2010年6月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          統(tǒng)計

          常用鏈接

          留言簿(13)

          我參與的團隊

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 呼和浩特市| 深水埗区| 芜湖县| 安阳县| 孟津县| 乌兰浩特市| 六盘水市| 龙山县| 台南县| 章丘市| 阳信县| 庄河市| 邛崃市| 炉霍县| 丰顺县| 古交市| 惠水县| 安达市| 防城港市| 横峰县| 丰顺县| 旺苍县| 靖边县| 长春市| 霍林郭勒市| 富平县| 台南市| 翁牛特旗| 泰州市| 乌拉特前旗| 舒城县| 沭阳县| 集安市| 孟连| 灵寿县| 台江县| 合江县| 盐城市| 工布江达县| 聂荣县| 芦溪县|