Grails中插件acegi-0.5.3.2安装后不能保存用户权限

  1. Grais中安装了acegi-0.5.3.2插件后,首先新增一些角色,然后新增用户的时候,进行角色的关联,一直关联不上。   
  2. 通关研究相关的页面和方法,即:create.gsp--用户添加页面、edit.gsp--用户修改页面、UserController中的addRoles方法做写修改,既实现了用户权限的关联。   
  3.   
  4. 第一步:   
  5. 修改grails-app\views\user\create.gsp中显示角色的代码   
  6.   
  7. 修改前:   
  8. <g:each in="${authorityList}" >   
  9.     <tr>   
  10.         <td valign="top" class="name" align="left">${it.authority.encodeAsHTML()}</td>   
  11.         <td align="left" ><g:checkBox name="${it.authority}"/></td>   
  12.     </tr>   
  13. </g:each>   
  14.   
  15. 修改后:   
  16. <g:each in="${authorityList}" >   
  17.     <tr>   
  18.         <td valign="top" class="name" align="left">${it.authority.encodeAsHTML()}</td>   
  19.         <td align="left" ><g:checkBox name="${it}"/></td>   
  20.     </tr>   
  21. </g:each>   
  22.   
  23. 第二步:   
  24. 修改grails-app\views\user\edit.gsp中显示角色的代码   
  25.   
  26. 修改前:   
  27. <g:each var="entry" in="${roleMap}">   
  28.     <li>${entry.key.authority.encodeAsHTML()}   
  29.         <g:checkBox name="${entry.key.authority}" value="${entry.value}"/>   
  30.     </li>   
  31. </g:each>   
  32.   
  33. 修改后:   
  34. <g:each var="entry" in="${roleMap}">   
  35.     <li>${entry.key.authority.encodeAsHTML()}   
  36.         <g:checkBox name="${entry.key}" value="${entry.value}"/>   
  37.     </li>   
  38. </g:each>   
  39.   
  40. 第三步:   
  41. 修改UserController中的addRoles方法   
  42. 备注:只所以要这样修改,是因为原来的写法,params获取不到‘ROLE’这个key,因为最初的写法只能获取到role相关的角色名称;修改后的写法是获取到Role这个实体,例如:demo.Race:1,on 根据'Race''on'判断是否选中,然后根据id进行角色的查询,最后赋予用户角色。   
  43.   
  44. 修改前:   
  45. private void addRoles(person) {   
  46.     for (String key in params.keySet()) {   
  47.         if (key.contains('ROLE') && 'on' == params.get(key)) {   
  48.             Role.findByAuthority(key).addToPeople(person)   
  49.         }   
  50.     }   
  51. }   
  52.   
  53. 修改后:   
  54. private void addRoles(person) {   
  55.     for (String key in params.keySet()) {   
  56.         if (key.contains('Role') && 'on' == params.get(key)) {   
  57.             Role.findById(key.split(':').getAt(1)).addToPeople(person)   
  58.         }   
  59.     }   
  60. }  

你可能感兴趣的:(grails)