Grails中如何使用acegi requestmap 进行动态配置权限

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






你可能感兴趣的:(Grails中如何使用acegi requestmap 进行动态配置权限)