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

            考慮到權(quán)限應(yīng)該可以由用戶自行分配,所以靜態(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中,默認(rèn)生成的show.gsp中是使用一個form帶多個參數(shù)來提交,比如?_action_Edit=edit 或者 ?_action_Delete=delete,
          但對于requestmap,它實際是對于url進(jìn)行限制的,并沒有對參數(shù)做限制,所以這時候 grails提交的action就不會被requestmap檢測到。

          4. 方案
           
             requestmap權(quán)限分配機(jī)制類似如下,這里只是demo。
             實際中,可以在UI界面上通過使用checkbox來代替該requestmap的URI string,完成對role進(jìn)行權(quán)限的分配。
           
           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. 關(guān)于這種方式,有一些缺點,就是使用原來的方式可以繞開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

          公告


          導(dǎo)航

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

          統(tǒng)計

          常用鏈接

          留言簿(13)

          我參與的團(tuán)隊

          隨筆分類(69)

          隨筆檔案(68)

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岳阳县| 钟山县| 台山市| 安多县| 湘乡市| 赞皇县| 屯留县| 隆安县| 南宁市| 新巴尔虎左旗| 密山市| 呼和浩特市| 衡东县| 汕头市| 德清县| 五台县| 泸西县| 信阳市| 平遥县| 雅江县| 新巴尔虎右旗| 扶余县| 巫溪县| 莫力| 醴陵市| 彰化市| 郯城县| 察雅县| 海原县| 象山县| 衡东县| 孝感市| 深圳市| 云安县| 鹰潭市| 连城县| 伊金霍洛旗| 宁乡县| 大田县| 二连浩特市| 科技|