实现给用户添加权限——SSM+ajax

数据库

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啦!!这样就算完成啦!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值