Grails中如何使用acegi requestmap 進行動態配置權限

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

          1. 安裝acegi plugin

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

          3. 問題
            在grails中,默認生成的show.gsp中是使用一個form帶多個參數來提交,比如?_action_Edit=edit 或者 ?_action_Delete=delete,
          但對于requestmap,它實際是對于url進行限制的,并沒有對參數做限制,所以這時候 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 想飛就飛 閱讀(1659) 評論(0)  編輯  收藏 所屬分類: J2EE

          公告


          導航

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

          統計

          常用鏈接

          留言簿(13)

          我參與的團隊

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东台市| 江达县| 鄂托克前旗| 武汉市| 浮梁县| 达日县| 金华市| 贺兰县| 肇庆市| 贡嘎县| 黄浦区| 蛟河市| 顺昌县| 安阳县| 巴南区| 思南县| 沙河市| 大城县| 抚顺县| 三门县| 毕节市| 台江县| 宣恩县| 将乐县| 同心县| 潢川县| 金溪县| 东城区| 崇州市| 潮安县| 长治市| 淮滨县| 石柱| 来安县| 宜兰县| 玉山县| 安岳县| 台南县| 贵南县| 天台县| 黑龙江省|