目录
数据库
userId对应用户表的序号,roleId对应权限表的序号
树形栏
这次bean层我建立了UserRole层,这一层存放的是id,UserId,RoleId,也就是关于权限管理的一层。相应的,创建了roleDao,roleService
管理者显示添加角色权限按钮
Controller
@RequestMapping("/login.do")
public ModelAndView login(User user, HttpSession session) {
int id = userService.login(user.getUsername(),user.getPassword());
ModelAndView modelAndView = new ModelAndView();
if(id!=-1){
List<Integer> roleIds= iRoleService.findRoleId(id);
session.setAttribute("user",user);
session.setAttribute("roleIds",roleIds);
modelAndView.setViewName("main");
}else{
modelAndView.setViewName("../failer");
}
return modelAndView;
}
在登陆后,如果成功登陆后(id!=-1),通过findRoleId(id)方法查看当前的权限(1为管理员,2为用户),session.setAttribute(“roleIds”,roleIds);准备在jsp页面进行调用
user-List.jsp
<% List<Integer> roleIds= (List<Integer>) session.getAttribute("roleIds");%>
<% if(roleIds.contains(1)){%>
<a href="${pageContext.request.contextPath}/user/toAddRole.do?id=${user.id}" class="btn bg-olive btn-xs">添加角色</a>
<%}%>
如果包含管理者权限,就展示添加用户按钮,点击后跳转到添加用户页面,并且将id参数传出。
controller
@RequestMapping("/toAddRole.do")
public ModelAndView toaddRole(int id, HttpSession session){
List<Role> roleList=iRoleService.findRoleById(id);
session.setAttribute("roleid",id);
ModelAndView mv=new ModelAndView();
mv.addObject("roles",roleList);
mv.setViewName("user-role-add");
return mv;
}
返回controller层接收所指定id,findRoleById(id)查看当前用户所具有的权限,并将视图user-role-add.jsp传给servlet响应。
user-role-add.jsp
<c:forEach items="${roles}" var="role">
<tr>
<td>
<input name="roleId" type="checkbox" value="${role.id}">
</td>
<td>${role.id}</td>
<td>${role.rolename }</td>
<td>${role.roledesc}</td>
</tr>
</c:forEach>
将所选对象不具有的权限展示,方便添加权限。
实现添加权限
user-role-add.jsp
<button type="button" class="btn bg-maroon" onclick="addRoles()">保存</button>
function addRoles() {
var checkedNum=$("input[name='roleId']:checked").length;
if(checkedNum==0){
alert("请至少选择一个进行添加!");
return;
}
if(confirm("确认要添加这些角色吗?")){
var roleList=new Array();
$("input[name='roleId']:checked").each(
function () {
roleList.push($(this).val())
}
);
}
alert(roleList);
$.ajax({
type:"post",
url: "${pageContext.request.contextPath}/user/AddRole.do",
data:{roleList:roleList.toString()},
success:function () {
alert("添加成功");
location.reload();
},
error:function () {
alert("添加失败");
}
});
}
从页面接收roleList,也就是所对应权限的编号(1是管理员,2是用户),这一部分运用ajax,一种局部响应的多线程网页开发技术。
Controller层
接下来回到controller层,我们已经接到了所需要的添加权限的编号,接下来就是在数据库中添加数据啦!!!
@RequestMapping("/AddRole.do")
public String addRole(String roleList, HttpSession session){
UserRole userRole=new UserRole();
String[] strs= roleList.split(",");
List<Integer> ids=new ArrayList<>();
int id = (int) session.getAttribute("roleid");
for(String s:strs) {
ids.add((Integer.parseInt(s)));
}for(int roleId:ids) {
userRole.setUserId(id);
userRole.setRoleId(roleId);
iRoleService.addRole(userRole);
}
return "redirect:findAll.do";
}
}
我将所接收的用户id和接收的权限编号放进userRole对象中封装起来,再用一次循环来多个申请的权限进行添加数据,
for(int roleId:ids) {
userRole.setUserId(id);
userRole.setRoleId(roleId);
iRoleService.addRole(userRole);
}
RoleMapper.xml
<insert id="addRoleById" parameterType="role">
insert into user_role(userId,roleId) values(#{userId},#{roleId})
</insert>
后面就是跟数据库连接这一块的代码
成果展示
目前我选的是id为6的数据,可以看到,现在页面上可以添加用户和管理员的权限,数据库中也没有userId=6的数据
现在我们开始添加,数据库新增了一条userId=6的数据,而且,管理员的权限已经添加,所以在页面中看不见admin啦!!这样就算完成啦!!