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 想飞就飞 阅读(1634) 评论(0)  编辑  收藏 所属分类: J2EE


只有注册用户登录后才能发表评论。


网站导航:
 

公告


导航

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

统计

常用链接

留言簿(13)

我参与的团队

随笔分类(69)

随笔档案(68)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜