- Grais中安装了acegi-0.5.3.2插件后,首先新增一些角色,然后新增用户的时候,进行角色的关联,一直关联不上。
- 通关研究相关的页面和方法,即:create.gsp--用户添加页面、edit.gsp--用户修改页面、UserController中的addRoles方法做写修改,既实现了用户权限的关联。
- 第一步:
- 修改grails-app\views\user\create.gsp中显示角色的代码
- 修改前:
- <g:each in="${authorityList}" >
- <tr>
- <td valign="top" class="name" align="left">${it.authority.encodeAsHTML()}</td>
- <td align="left" ><g:checkBox name="${it.authority}"/></td>
- </tr>
- </g:each>
- 修改后:
- <g:each in="${authorityList}" >
- <tr>
- <td valign="top" class="name" align="left">${it.authority.encodeAsHTML()}</td>
- <td align="left" ><g:checkBox name="${it}"/></td>
- </tr>
- </g:each>
- 第二步:
- 修改grails-app\views\user\edit.gsp中显示角色的代码
- 修改前:
- <g:each var="entry" in="${roleMap}">
- <li>${entry.key.authority.encodeAsHTML()}
- <g:checkBox name="${entry.key.authority}" value="${entry.value}"/>
- </li>
- </g:each>
- 修改后:
- <g:each var="entry" in="${roleMap}">
- <li>${entry.key.authority.encodeAsHTML()}
- <g:checkBox name="${entry.key}" value="${entry.value}"/>
- </li>
- </g:each>
- 第三步:
- 修改UserController中的addRoles方法
- 备注:只所以要这样修改,是因为原来的写法,params获取不到‘ROLE’这个key,因为最初的写法只能获取到role相关的角色名称;修改后的写法是获取到Role这个实体,例如:demo.Race:1,on 根据'Race'和'on'判断是否选中,然后根据id进行角色的查询,最后赋予用户角色。
- 修改前:
- private void addRoles(person) {
- for (String key in params.keySet()) {
- if (key.contains('ROLE') && 'on' == params.get(key)) {
- Role.findByAuthority(key).addToPeople(person)
- }
- }
- }
- 修改后:
- private void addRoles(person) {
- for (String key in params.keySet()) {
- if (key.contains('Role') && 'on' == params.get(key)) {
- Role.findById(key.split(':').getAt(1)).addToPeople(person)
- }
- }
- }
Grails中插件acegi-0.5.3.2安装后不能保存用户权限
最新推荐文章于 2020-04-15 11:41:30 发布