打开原教程视频
注:本人是渣渣,有错请谅解。

实现用户角色分配功能







1、数据准备

insert into `t_role` (`id`, `name`) values('1','PM - 项目经理');
insert into `t_role` (`id`, `name`) values('2','SE - 软件工程师');
insert into `t_role` (`id`, `name`) values('3','PG - 程序员');
insert into `t_role` (`id`, `name`) values('4','TL - 组长');
insert into `t_role` (`id`, `name`) values('5','GL - 组长');
insert into `t_role` (`id`, `name`) values('6','QA - 品质保证');
insert into `t_role` (`id`, `name`) values('7','QC - 品质控制');
insert into `t_role` (`id`, `name`) values('8','SA - 软件架构师');
insert into `t_role` (`id`, `name`) values('9','CMO / CMS - 配置管理员');


2、页面准备

在main工程下的/WEB-INF/jsp/user目录下创建assignRole.jsp文件,在文件中添加下面代码

<%--Created by IntelliJ IDEA.User: 黄彬Date: 2020/6/15Time: 22:27To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh-CN">
<head><base href="<%=basePath%>"/><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="author" content=""><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="css/font-awesome.min.css"><link rel="stylesheet" href="css/main.css"><link rel="stylesheet" href="css/doc.min.css"><style>.tree li {list-style-type: none;cursor:pointer;}</style>
</head><body><nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><div class="container-fluid"><div class="navbar-header"><div><a class="navbar-brand" style="font-size:32px;" href="user.html">众筹平台 - 用户维护</a></div></div><div id="navbar" class="navbar-collapse collapse"><ul class="nav navbar-nav navbar-right"><li style="padding-top:8px;"><div class="btn-group"><button type="button" class="btn btn-default btn-success dropdown-toggle" data-toggle="dropdown"><i class="glyphicon glyphicon-user"></i> ${sessionScope.user.username} <span class="caret"></span></button><ul class="dropdown-menu" role="menu"><li><a href="#"><i class="glyphicon glyphicon-cog"></i> 个人设置</a></li><li><a href="#"><i class="glyphicon glyphicon-comment"></i> 消息</a></li><li class="divider"></li><li><a href="dispatcherController/logout.do"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li></ul></div></li><li style="margin-left:10px;padding-top:8px;"><button type="button" class="btn btn-default btn-danger"><span class="glyphicon glyphicon-question-sign"></span> 帮助</button></li></ul><form class="navbar-form navbar-right"><input type="text" class="form-control" placeholder="Search..."></form></div></div>
</nav><div class="container-fluid"><div class="row"><div class="col-sm-3 col-md-2 sidebar"><div class="tree">
<%--                <ul style="padding-left:0px;" class="list-group">--%>
<%--                    <li class="list-group-item tree-closed" >--%>
<%--                        <a href="main.html"><i class="glyphicon glyphicon-dashboard"></i> 控制面板</a>--%>
<%--                    </li>--%>
<%--                    <li class="list-group-item">--%>
<%--                        <span><i class="glyphicon glyphicon glyphicon-tasks"></i> 权限管理 <span class="badge" style="float:right">3</span></span>--%>
<%--                        <ul style="margin-top:10px;">--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="user.html" style="color:red;"><i class="glyphicon glyphicon-user"></i> 用户维护</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="role.html"><i class="glyphicon glyphicon-certificate"></i> 角色维护</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="permission.html"><i class="glyphicon glyphicon-lock"></i> 许可维护</a>--%>
<%--                            </li>--%>
<%--                        </ul>--%>
<%--                    </li>--%>
<%--                    <li class="list-group-item tree-closed">--%>
<%--                        <span><i class="glyphicon glyphicon-ok"></i> 业务审核 <span class="badge" style="float:right">3</span></span>--%>
<%--                        <ul style="margin-top:10px;display:none;">--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="auth_cert.html"><i class="glyphicon glyphicon-check"></i> 实名认证审核</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="auth_adv.html"><i class="glyphicon glyphicon-check"></i> 广告审核</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="auth_project.html"><i class="glyphicon glyphicon-check"></i> 项目审核</a>--%>
<%--                            </li>--%>
<%--                        </ul>--%>
<%--                    </li>--%>
<%--                    <li class="list-group-item tree-closed">--%>
<%--                        <span><i class="glyphicon glyphicon-th-large"></i> 业务管理 <span class="badge" style="float:right">7</span></span>--%>
<%--                        <ul style="margin-top:10px;display:none;">--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="cert.html"><i class="glyphicon glyphicon-picture"></i> 资质维护</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="type.html"><i class="glyphicon glyphicon-equalizer"></i> 分类管理</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="process.html"><i class="glyphicon glyphicon-random"></i> 流程管理</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="advertisement.html"><i class="glyphicon glyphicon-hdd"></i> 广告管理</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="message.html"><i class="glyphicon glyphicon-comment"></i> 消息模板</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="project_type.html"><i class="glyphicon glyphicon-list"></i> 项目分类</a>--%>
<%--                            </li>--%>
<%--                            <li style="height:30px;">--%>
<%--                                <a href="tag.html"><i class="glyphicon glyphicon-tags"></i> 项目标签</a>--%>
<%--                            </li>--%>
<%--                        </ul>--%>
<%--                    </li>--%>
<%--                    <li class="list-group-item tree-closed" >--%>
<%--                        <a href="param.html"><i class="glyphicon glyphicon-list-alt"></i> 参数管理</a>--%>
<%--                    </li>--%>
<%--                </ul>--%><jsp:include page="/WEB-INF/jsp/common/menu.jsp"></jsp:include></div></div><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><ol class="breadcrumb"><li><a href="#">首页</a></li><li><a href="#">数据列表</a></li><li class="active">分配角色</li></ol><div class="panel panel-default"><div class="panel-body"><form role="form" class="form-inline"><div class="form-group"><label for="exampleInputPassword1">未分配角色列表</label><br><select id="unAssign" class="form-control" multiple size="10" style="width:150px;overflow-y:auto;">
<%--                      展示未分配的角色          --%><c:forEach items="${unAssignRoles}" var="unAssignRole"><option value="${unAssignRole.id}">${unAssignRole.name}</option></c:forEach></select></div><div class="form-group"><ul><li id="unAssignButton" class="btn btn-default glyphicon glyphicon-chevron-right"></li><br><li id="assignButton" class="btn btn-default glyphicon glyphicon-chevron-left" style="margin-top:20px;"></li></ul></div><div class="form-group" style="margin-left:40px;"><label for="exampleInputPassword1">已分配角色列表</label><br><select id="assign" class="form-control" multiple size="10" style="width:150px;overflow-y:auto;">
<%--                                展示已分配的角色--%><c:forEach items="${assignRoles}" var="assignRole"><option value="${assignRole.id}">${assignRole.name}</option></c:forEach></select></div></form></div></div></div></div>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button><h4 class="modal-title" id="myModalLabel">帮助</h4></div><div class="modal-body"><div class="bs-callout bs-callout-info"><h4>测试标题1</h4><p>测试内容1,测试内容1,测试内容1,测试内容1,测试内容1,测试内容1</p></div><div class="bs-callout bs-callout-info"><h4>测试标题2</h4><p>测试内容2,测试内容2,测试内容2,测试内容2,测试内容2,测试内容2</p></div></div><!--<div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary">Save changes</button></div>--></div></div>
</div>
<script src="jquery/jquery-2.1.1.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<script src="script/docs.min.js"></script>
<script type="text/javascript" src="jquery/layer/layer.js"></script>
<script type="text/javascript">$(function () {$(".list-group-item").click(function(){if ( $(this).find("ul") ) {$(this).toggleClass("tree-closed");if ( $(this).hasClass("tree-closed") ) {$("ul", this).hide("fast");} else {$("ul", this).show("fast");}}});});//添加角色按钮事件处理$("#unAssignButton").click(function () {//获取选中的角色的idvar items = $("#unAssign option:selected");//判断长度if (items.length==0) {layer.msg("请选择分配的角色", {time:1500, icon:5, shift:6}); //弹出时间,图标,特效return false;}else {//封装数据到jsonvar jsonObject = {id : "${param.id}"//用户id};$.each(items,function (index,role) {//角色idjsonObject["roleID["+index+"]"] = this.value;});var saving=-1;$.ajax({type : "post",data : jsonObject,url : "userController/saveUserRole" ,beforeSend : function(){saving=layer.msg('Loading', {icon: 16});return true;},success : function (result) {layer.close(saving);if(result.success) {$("#assign").append(items.clone());items.remove();}else {layer.msg("分配失败!!!", {time:1500, icon:5, shift:6}); //弹出时间,图标,特效}},error : function (result) {layer.msg(result.message, {time:1500, icon:5, shift:6}); //弹出时间,图标,特效}});}});//取消角色按钮事件处理$("#assignButton").click(function () {//获取选中的角色的idvar items = $("#assign option:selected");//取消已选定的角色//判断长度if (items.length==0) {layer.msg("请选择删除的角色", {time:1500, icon:5, shift:6}); //弹出时间,图标,特效return false;}else {//封装数据到jsonvar jsonObject = {//用户idid : "${param.id}"};$.each(items,function (index,role) {//角色idjsonObject["roleID["+index+"]"] = this.value;});var deleting=-1;$.ajax({type : "post",data : jsonObject,url : "userController/deleteUserRole" ,beforeSend : function(){deleting=layer.msg('Loading', {icon: 16});return true;},success : function (result) {layer.close(deleting);if(result.success) {$("#unAssign").append(items.clone());//将选定的角色进行添加items.remove();}else {layer.msg("删除失败!!!", {time:1500, icon:5, shift:6}); //弹出时间,图标,特效}},error : function (result) {layer.msg(result.message, {time:1500, icon:5, shift:6}); //弹出时间,图标,特效}});}});
</script>
</body>
</html>

3、添加页面跳转的处理路径和controller方法

/*** 跳转至角色分配页面* @return*/@RequestMapping(value = "/toAssignRole")public String toAssignRole(Integer id, Map<String, List<Role>> roleMap){List<Role> assignRoles = new ArrayList<Role>();List<Role> unAssignRoles = new ArrayList<Role>();//查询该用户已分配得角色的idList<Integer> RoleIDs = userService.selectAssignRole(id);//查询所有角色List<Role> allRole = userService.selectAllRole();for (Role role : allRole) { //对角色是否分配进行判断if (RoleIDs.contains(role.getId())){assignRoles.add(role);}else { unAssignRoles.add(role);}}//将数据封装并返回前端页面roleMap.put("assignRoles",assignRoles);roleMap.put("unAssignRoles",unAssignRoles);return "user/assignRole";}
 /*** 处理用户角色删除* @param id* @param data* @return*/@ResponseBody@RequestMapping(value = "/deleteUserRole")public Object deleteUserRole(Integer id , Data data){AjaxResult result = new AjaxResult();try {userService.deleteUserRole(id ,data);result.setSuccess(true);}catch (Exception e){result.setSuccess(false);result.setMessage("出现异常!!!");}return result;}
 /*** 处理用户角色分配* @param id* @param data* @return*/@ResponseBody@RequestMapping(value = "/saveUserRole")public Object saveUserRole(Integer id , Data data){AjaxResult result = new AjaxResult();try {userService.saveUserRole(id ,data);result.setSuccess(true);}catch (Exception e){e.printStackTrace();result.setSuccess(false);result.setMessage("出现异常!!!");}return result;}

5、service、dao层的数据处理和sql查询语句

页面数据查询:

 public List<Integer> selectAssignRole(int userID) {return userMapper.selectAssignRole(userID);}
 public List<Role> selectAll() {return roleMapper.selectAll();}
<select id="selectAssignRole" resultType="int" parameterType="int" >select roleid from t_user_role where userid = #{userID}</select><select id="selectAllRole" resultType="com.bin.crowdfunding.bean.Role">select * from t_role</select>

添加用户角色:

public Integer saveUserRole(Integer userID, Data data) {return userMapper.saveUserRole(userID,data);}
<insert id="saveUserRole"><foreach collection="data.roleID" separator=";" item="roleID">insert into t_user_role(userid , roleid) values(#{userID},#{roleID})</foreach></insert>

删除用户角色:

public Integer deleteUserRole(Integer userID, Data data) {return userMapper.deleteUserRole(userID,data);}
<delete id="deleteUserRole">delete from t_user_role where userid= #{userID} and roleid in<foreach collection="data.roleID" open="(" separator="," close=")" item="roleID">#{roleID}</foreach></delete>

6、测试效果




查看数据库的t_user_role表,检查数据的真实性:

众筹网站项目第七天之用户角色分配(1)相关推荐

  1. 众筹网站项目第五天之用户的增、删、改

    打开原教程视频 注:本人是渣渣,有错请谅解. 增加用户 流程:点击新增按钮->跳转至用户信息填写页面->点击添加将数据保存到后台服务器并转到用户列表. 1.在userList.jsp的新增 ...

  2. 众筹网站项目第七天之zTree树形结构实现(2)

    打开原教程视频 注:本人是渣渣,有错请谅解. 许可维护页面的zTree树形结构实现 实现效果: 实现过程 1.数据准备 在数据库中插入相应的数据 insert into `t_permission` ...

  3. 进销存系统_用户角色分配(12)

    一.用户角色分配 1.1.用户角色分配界面原型 添加用户记录 更新用户记录 1.2.用户角色分配实现流程 添加用户-角色分配 更新用户-角色分配 代码 RoleServiceImpl.java @Ov ...

  4. 众筹网站项目第一天之项目环境搭建和环境测试

    打开原教程视频 注:本人是编程小白,这个是我第一个尝试的项目,编写该系列博客是为了记录第一次做项目的经历,其中肯定会有不少不成熟的操作甚至错误之处,如果可以,希望大神指出,谢谢大家. 资料准备 点击获 ...

  5. 众筹网站项目第四天之异步请求的分页查询和模糊条件查询(2)

    打开原教程视频 注:本人是渣渣,有错请谅解. 异步请求的分页查询和模糊条件查询 同步请求和异步请求的区别在实现登录功能时已经介绍过了,下图便是实现异步请求分页查询的时序图. 可以看出我们首先进行用户列 ...

  6. [附源码]计算机毕业设计JAVA创意众筹网站

    [附源码]计算机毕业设计JAVA创意众筹网站 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intell ...

  7. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)- ...

  8. 【SSH框架/国际物流商综平台】-05 单点登录 用户-角色-权限分配 Ztree.js structs2.0 异常框架 细粒度权限控制 BaseEntitity中createby degree

    回顾 Shiro安全框架 认证,授权,加密,会话管理(单点登录),缓存,与web集成 单点登录(SSO Single Sign on)的原理 就是将原有的各个系统的会话管理机制,抽取出来交给第三方集中 ...

  9. 后台用户角色权限管理设计

    目录 1.概述 2.设计 2.1 用户管理 2.2 角色管理 2.3 权限管理 2.4 用户.角色.权限的关系 3.总结 1.概述 在设计产品后台系统设置时,可根据不同项目的实际需求来设计后台系统设置 ...

最新文章

  1. 自学python推荐书籍 知乎-在知乎上学 Python - 爬虫篇
  2. 使用xmanager连接centos5.5
  3. Android 线程 thread 两种实现方法!
  4. datatables屏蔽警告弹窗
  5. Ant—使用Ant构建一个简单的Java工程(两)
  6. 怎么简单的锁定文件夹_简单性与鲁棒性–在锁定文件处理中展示
  7. SQL Server2008 查找用户登录日志
  8. 计算机国二笔试试题,全国计算机等考试二笔试试题(2).ppt
  9. 23种设计模式(二十二)行为变化之命令模式
  10. 学习3ds max插件开发过程中的一些小结
  11. Bootstarp4 文字排版
  12. 海南大学考研经验分享之(考研数学)
  13. vibe算法 c++实现
  14. 改进的协同过滤推荐算法
  15. SOUI实例之扫雷一
  16. MVC进阶学习--View和Controller之间的数据传递(一)
  17. linux xsh加密传输,WBB - 解决Xshell迁移/同步xsh文件时,ssh秘钥密码/密码丢失问题...
  18. 海康威视监控插件使用步骤
  19. 新手怎样才能快速的学会建网站
  20. eclips 快捷键大全

热门文章

  1. Python模拟登录某橙色软件并获取所有订单,康康买了啥奇奇怪怪的东西?
  2. 机器学习入门三剑客之Matplotlib
  3. PS后期合成深海海底水下人像摄影效果
  4. PLC学习第一篇:PLC程序架构
  5. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯为什么被称为“朴素”?...
  6. tgp进游戏不显示服务器连接异常,TGP启用腾讯游戏提示“TCLS_CORE异常退出”的解决方法...
  7. 西部世界又一发现:ION—存储在IPFS上的去中心化身份服务
  8. Swagger2的配置教程
  9. swagger2 使用教程
  10. 杂-格签名中常见数字的意义