中软国际实训第五天——实现角色管理的数据库以及初步操作
在昨天实现了角色管理的增添查改与分页之后,在今天我们需要将不同的用户分类,以保证在用户是不同权限时,可以对所需的信息进行展示。
要对角色管理,我们就需要在数据库中创建两张表tb_role与user_role。
在项目的对应文件夹下建立接口与实现的类,这里我们在bean包中新建一个Role类和UserRole类其中这两个类对应数据库中tb_role表和user_role表对应的实体类
Role类:
public class Role {
private int id;
private String rolename;
private String roledesc;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
public String getRoledesc() {
return roledesc;
}
public void setRoledesc(String roledesc) {
this.roledesc = roledesc;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", rolename='" + rolename + '\'' +
", roledesc='" + roledesc + '\'' +
'}';
}
}
UserRole类:
public class UserRole {
private int id;
private int userId;
private int roleId;
public UserRole(){
}
public UserRole(int id, int userId, int roleId) {
this.id = id;
this.userId = userId;
this.roleId = roleId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
@Override
public String toString() {
return "UserRole{" +
"id=" + id +
", userId=" + userId +
", roleId=" + roleId +
'}';
}
}
mybatis配置:
在dao目录下建立一个接口RoleDao,创建相应的接口来具体实现角色权限管理
public interface RoleDao {
List<Integer> findRoleIdByUserId(int userId);
List<Role> findRoleByUserId(int id);
void addRole(UserRole userRole);
新建RoleMappe.xml实现Dao接口,也就是对数据库进行操作,本质是mybatis的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhongruan.dao.RoleDao" >
<select id="findRoleIdByUserId" parameterType="int" resultType="int">
select roleId from user_role where userId=#{userId};
</select>
<select id="findRoleByUserId" parameterType="int" resultType="role">
select * from tb_role where id not in (select roleId from user_role where userId=#{id})
</select>
<insert id="addRole" parameterType="userRole">
insert into user_role (userId,roleId) values (#{userId},#{roleId})
</insert>
</mapper>
service层:
在UserController中控制不同页面的跳转控制页面跳转以及前端后台数据传递的类
@RequestMapping("toAddRole.do")
public ModelAndView toAddRole (int id){
List<Role> roleList = roleService.findRoleByUserId(id);
ModelAndView mv = new ModelAndView();
mv.addObject("roles",roleList);
mv.addObject("id",id);
mv.setViewName("user-role-add");
return mv;
}
@RequestMapping("addRole.do")
@ResponseBody
public String add(String roleList,String userId){
String[] strs = roleList.split(",");
List<Integer> ids = new ArrayList<>();
for(String s:strs){
ids.add(Integer.parseInt(s));
}
roleService.add(ids,userId);
return "";
}
web层:
<tbody>
<c:forEach items="${pageInfo.list}" var="user">
<tr>
<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
<td class="text-center">
<a href="/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
<a href="/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
<% List<Integer> roleIds = (List<Integer>) session.getAttribute("roleIds");%>
<% if (roleIds.contains(1)){%>
<a href="/user/toAddRole.do?id=${user.id}">添加角色</a>
<% } %>
</td>
</tr>
</c:forEach>
</tbody>
之后修改用户管理出标签,添加一个判断结构。
<li id="system-setting">
<security:authorize access="hasRole('ADMIN')">
<a
href="${pageContext.request.contextPath}/user/findAll.do?pages=1&size=5"> <i
class="fa fa-circle-o"></i> 用户管理
</a>
</security:authorize>
</li>
access="hasRole('ADMIN')">
<a
href="${pageContext.request.contextPath}/user/findAll.do?pages=1&size=5"> <i
class="fa fa-circle-o"></i> 用户管理
</a>
</security:authorize>
</li>