1.建立角色与权限的表
为多对多关系
角色表role
权限表permission
角色与权限中间表role_permission_rel
使用代码生成器生成相关mapper
2.建立角色页面
角色页面其实跟员工页面进入后一样 都是列表
<%--数据表格--%>
<div id="role_dg"></div>
<%--添加/编辑对话框--%>
<div id="dialog">
<form id="myform">
<table align="center" style="border-spacing: 20px 30px">
<input type="hidden" name="id">
<tr align="center">
<td>角色编号: <input type="text" name="username" class="easyui-validatebox" ></td>
<td>角色名称: <input type="text" name="username" class="easyui-validatebox" ></td>
</tr>
<tr>
<td><div id="role_data1"></div></td>
<td><div id="role_data2"></div></td>
</tr>
</table>
</form>
</div>
<%--数据表顶部的工具栏--%>
<div id="toolbar">
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true" id="add">添加</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true" id="edit">编辑</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true" id="remove">删除</a>
</div>
对应的js
数据表格
3.加载权限数据实现点击添加权限
加载数据,控制层就不展示了
bug
在控制层由于permissionList方法没有注解@ResponseBody,因此左侧的所有权限的请求发生404错误
实现点击添加权限的逻辑,先判断是否存在该权限,若没有则添加,若有则高亮显示该权限
实现已有权限点击删除
4.添加角色权限
定义角色权限关系:一个角色(Role)有多个权限(Permission)
点击保存时,如果没有隐藏字段id,则为添加操作
保存时, 参数传递,默认只传递input中的内容,还需要在提交表单时, 把添加的权限信息提交过去
接收参数,保存角色与权限
小知识点,传多个参数时Mapper的参数列表需要注解@param
void insertRoleAndPermissionRel(@Param("rid") Long rid, @Param("pid") Long pid);
点击编辑按钮进行数据回显
对应的方法的sql语句
判断是否为编辑按钮的保存操作
5.删除某个角色
6.员工添加角色
添加员工时, 添加角色下拉列表
保存时, 保存时传递角色信息
小bug:点击保存之后提示保存失败,而EmployeeControler打印emploee对象中可以打出来,也就是数据确实可以传递给后台
①问题出在与数据库的交互中,因为先调用了employee的insert操作,如下图
②接着调用方法来向employee_role_rel中insert一条记录,保存eid和rid,
问题就出在了第①步中,因为employee的id是主键且为递增,所以保存员工时无需传值给id,或者说所传的employee对象中id=null,所以再进行第②步时,eid也为null,而在员工角色关系表中,eid为主键
解决:第一步对应的sql语句加上
官方的说法是该参数的作用是:“允许JDBC支持自动生成主键,需要驱动兼容”,如何理解这句话的意思?
其本意是说:对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,此时设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。
员工编辑
回显数据
bug:这里又犯了一个错误,传入控制层的参数写成了和url不对应的参数,url为"/getRoleByEid?id=" + row.id,而控制层写成了eid
保存编辑: