1.说明

只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取。

2.功能展示

包括用户增删改查和分配角色。

3.业务模型

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_user")
public class SysUser implements Serializable { private static final long serialVersionUID = 1L; /**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id; /**
* 用户名
*/
private String username; /**
* 用户密码
*/
private String password; /**
* 真实姓名
*/
private String truename; /**
* 邮箱
*/
private String email; /**
* 电话
*/
private String phone; /**
* 所属部门ID
*/
private Integer deptId; /**
* 头像地址
*/
//private String avatar; /**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime; /**
* 创建人
*/
private String createUser; /**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; /**
* 修改人
*/
private String updateUser; @TableField(exist=false)
private String deptName; @TableField(exist=false)
private SysRole role; @TableField(exist=false)
private SysDept dept; }

4.控制器

@Controller
@RequestMapping("/sysUser")
public class SysUserController {
@Autowired
private SysUserService userService; @Autowired
private SysRoleService roleService; @Autowired
private SysDeptService deptService; @Autowired
private SysRoleUserService roleUserService; @GetMapping("listUI")
public String listUI() {
return "user/list";
} @GetMapping("toSelectDept")
public String SelectDept() {
return "user/selectDept";
} @GetMapping("selectRole/{userId}")
public String SelectRole(@PathVariable Integer userId, Model model) {
// 根据用户ID查询其拥有的角色
//List<Map<String,Object>> roles = userService.selectRolesByUserId(userId);
SysUser entity = userService.getById(userId);
model.addAttribute("user", entity); return "user/selectRole";
} @PostMapping("list")
@ResponseBody
public Result<IPage<SysUser>> list(@RequestParam(value = "username", required = false) String username,
@RequestParam(value = "deptId", required = false) Integer deptId,
@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
// 获取当前已登录用户部门ID
/*Integer currentDeptId = getUserEntity().getDeptId();
if(deptId==null){
deptId = currentDeptId;
}*/
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
Page<SysUser> page = new Page<>(pageNo,pageSize);
IPage<SysUser> result = userService.selectUserList(page, username, deptId);
// 设置总记录数
result.setTotal(userService.count(queryWrapper)); return ResultUtil.ok(result);
} @GetMapping("checkAccount")
@ResponseBody
public boolean checkAccount(@RequestParam(required=true) String username) {
List<SysUser> user = (List<SysUser>) userService.listByMap(ConvertUtil.toMap("username",(Object)username));
if(!Validator.isNullOrEmpty(user)){
return false;
}
return true;
} @OperLog(operModule = "用户管理",operType = "修改",operDesc = "修改用户")
@PostMapping("save")
@ResponseBody
public Result<String> add(@RequestBody SysUser user, Map<String,Object> map){
if(user.getId()==null){
// 检查用户是否存在
if(!checkAccount(user.getUsername())){
return ResultUtil.fail("用户名已存在!");
}
// 设置添加用户的密码和加密盐
user.setPassword(MD5Util.md5Password(user.getPassword(),2));
//user.setSalt(userEntity.getSalt());
// 设置创建者姓名
user.setCreateUser("");
user.setCreateTime(new Date()); // 保存用户
boolean result = userService.save(user);
if(!result)
{
return ResultUtil.fail("添加失败!");
} // 添加角色和用户关系记录
/*SysRoleUser roleUser = new SysRoleUser();
roleUser.setRoleId(user.getRole().getId());
roleUser.setUserId(user.getId());
roleUserService.save(roleUser);*/
}else{
user.setUpdateTime(new Date());
userService.saveOrUpdate(user);
}
return ResultUtil.ok();
} @OperLog(operModule = "用户管理",operType = "删除",operDesc = "删除用户")
@PostMapping("remove")
@ResponseBody
public Result<String> remove(@RequestParam Integer id) {
// 1.删除用户与角色的关联记录
Map<String,Object> param = new HashMap<>();
param.put("user_id", id);
roleUserService.removeByMap(param);
// 2.删除用户
if(!userService.removeById(id)){
return ResultUtil.fail("删除失败!");
}
return ResultUtil.ok();
} @GetMapping("info/{userId}")
public String selectInfo(Map<String,Object> map,@PathVariable(required=true) Integer userId) {
SysUser user = userService.getById(userId);
map.put("user", user);
return "user/info";
} // 根据用户Id查询其拥有的角色
@GetMapping("/getRoles/{userId}")
@ResponseBody
public List<SysRole> getRoles(@PathVariable Integer userId){
List<SysRole> roles = userService.selectRolesByUserId(userId); return roles;
} // 保存用户角色
@OperLog(operModule = "用户管理",operType = "修改",operDesc = "分配角色")
@PostMapping("saveRole")
@ResponseBody
public Result<String> saveRole(@RequestParam Integer userId, @RequestParam(value = "roleIds[]") Integer[] roleIds){
userService.saveRole(userId, Arrays.asList(roleIds));
return ResultUtil.ok();
} }

5.前端页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<meta charset="utf-8">
<title>用户列表</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" th:href="@{/static/plugin/layui/css/layui.css}" media="all">
</head>
<body>
<div class="searchTable">
用户名:
<div class="layui-inline">
<input class="layui-input" name="s_username" id="s_username" autocomplete="off">
</div>
<button id="searchBtn" class="layui-btn" data-type="reload">搜索</button>
</div> <table class="layui-hide" id="SysUser" lay-filter="SysUser"></table> <input type="text" id="ctx" hidden="hidden" th:value="${#request.getContextPath()}"> <!--编辑表单-->
<div class="layui-row" id="editForm" style="display:none;">
<div class="layui-col-md10">
<form class="layui-form layui-from-pane" action="" style="margin-top:20px">
<input type="text" id="id" name="id" hidden="hidden">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">所属部门</label>
<div class="layui-input-line" style="float: left;">
<input type="text" id="deptName" name="deptName" required lay-verify="required" autocomplete="off"
class="layui-input" disabled="disabled">
</div>
<button class="layui-btn layui-btn-sm" id="chooseDept" type="button" style="float: left;margin-left: 1.5em;">
<i class="layui-icon"></i>
</button> <input type="hidden" id="deptId" name="deptId"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-block">
<input type="text" id="username" name="username" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-block">
<input type="password" id="password" name="password" required lay-verify="required"
autocomplete="off"
placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" id="truename" name="truename" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input">
</div>
</div>
<!--<div class="layui-form-item">
<label class="layui-form-label">角色</label>
<div class="layui-input-block">
<select id="roleId" name="roleId" lay-verify="required">
<option value=""></option>
</select>
<div class="layui-unselect layui-form-select">
<div class="layui-select-title">
<input type="text" placeholder="请选择" value="" readonly=""
class="layui-input layui-unselect">
<i class="layui-edge"></i>
</div>
</div>
</div>
</div>-->
<div class="layui-form-item" style="margin-top:40px">
<div class="layui-input-block">
<button class="layui-btn layui-btn-submit " lay-submit="" lay-filter="confirm">确认</button>
<button type="button" class="layui-btn layui-btn-primary" id="back">关闭</button>
</div>
</div>
</form>
</div>
</div>

6 获取源码

捐赠任意金额,评论区留下邮箱发送 :)

SpringBoot+Shiro+LayUI权限管理系统项目-7.实现用户管理的更多相关文章

  1. 基于easyUI实现权限管理系统(四)——用户管理

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. user.jsp:用户管理界面 <!DOCTYPE html PUBLIC "-//W3 ...

  2. SpringBoot框架的权限管理系统

    springBoot框架的权限管理系统,支持操作权限和数据权限,后端采用springBoot,MyBatis,Shiro,前端使用adminLTE,Vue.js,bootstrap-table.tre ...

  3. SpringBoot&Shiro实现权限管理

    SpringBoot&Shiro实现权限管理 引言 相信大家前来看这篇文章的时候,是有SpringBoot和Shiro基础的,所以本文只介绍整合的步骤,如果哪里写的不好,恳请大家能指出错误,谢 ...

  4. .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目

    系列目录     [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...

  5. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. SpringBoot+Shiro学习(七):Filter过滤器管理

    SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注  0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x ...

  9. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  10. niaobulashi-一个基于springboot shrio的权限管理系统

    github项目地址:https://github.com/niaobulashi/niaobulashi springboot学习地址:http://www.ityouknow.com/spring ...

随机推荐

  1. 【转帖】isolcpus功能与使用

    isolcpus功能存在已久,笔者追溯v2.6.11(2005年)那时内核就已经存在了isolcpus功能.根据kernel-parameters.txt 上的解释,"isolcpus功能用 ...

  2. [转帖]kubelet 原理解析四:probeManager

    https://segmentfault.com/a/1190000022163835 概述 在Kubernetes 中,系统和应用程序的健康检查任务是由 kubelet 来完成的,本文主要讨论kub ...

  3. 六个节点三主三从Redis集群最简单搭建方法

    背景 一个服务器上面的三主三从的界面太low,容易出问题. 为了验证高可用, 我这边使用六台机器进行了三主三从的搭建. 模仿开源版的一键搭建集群的脚本进行使用,感觉非常简单,这里简单进行一下总结. 环 ...

  4. Linux下PG数据库计划任务定期备份恢复的方法

    注意事项 PG数据库需要注意的一点是需要安装OSSP-UUID的组件才能使用. 本次使用最除了冷备之外 最简单的 pg_dump和pg_restore的操作 的方式来进行处理 务必定期演练保证数据备份 ...

  5. rfc7230 Message Syntax and Routing

    rfc7230 目录 rfc7230 2 Architecture 2.6 Protocol Versioning 3 Message Format 3.1 Start Line 3.1.1 Requ ...

  6. 可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP

    P8946 - The Lost Symbol 这种类型的 dp 的特点就是大部分转移形如 \(f(i,j)\rightarrow f(i+1,j+1)\) 之类的,并且当以上转移出现时原数组被清空, ...

  7. 基于NET Core 的Nuget包制作、发布和运用流程

    开发缘由:公司需要调用天眼查-开放平台 ,验证客户的的营业执照信息是否在存续期,并将企业基本信息返回,之后和使用百度图文识别的企业信息进行对照是否一致. 前期准备 在网站中注册后,需要够买套餐.之后点 ...

  8. yum 安装失败解决思路$releasever(curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error")

    问题 公司使用刀片机的系统版本是CentOS 7.9.2009(Core),本人在重新安装虚拟机时,也使用对应的系统版本,在安装软件时,yum无法正常使用,一开始觉得,centos的release版本 ...

  9. 知识蒸馏相关技术【模型蒸馏、数据蒸馏】以ERNIE-Tiny为例

    1.任务简介 基于ERNIE预训练模型效果上达到业界领先,但是由于模型比较大,预测性能可能无法满足上线需求. 直接使用ERNIE-Tiny系列轻量模型fine-tune,效果可能不够理想.如果采用数据 ...

  10. 3.1 DLL注入:常规远程线程注入

    动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为.DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了Window ...