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. [转帖]【split】Linux上用 split实现大文件的拆分和合并

    https://www.jianshu.com/p/87748b8563a9 有没有遇到某些网站上传复件时,单个文件有大小限制,导致上传失败呢?当然你可以采用更高的压缩率重新生成压缩包来解决,但如果还 ...

  2. [转帖]全表扫描却产生大量db file sequential read一例

    老熊 Oracle性能优化 2012-05-23 开发人员在进行新系统上线前的数据校验测试时,发现一条手工执行的SQL执行了超过1小时还没有返回结果.SQL很简单: SELECT * FROM MOB ...

  3. 【转帖】读懂什么是RDMA

    一.什么是RDMA1.RDMA主要体现     2.如何理解RDMA和TCP技术的区别?3.使用RDMA的好处包括: 二.什么是RoCE?1. RDMA协议包含:Infiniband(IB)2. 为什 ...

  4. [转帖]ESXi下查看CPU 频率

    https://www.jianshu.com/p/8943a4223ed7 查看CPU的固定频率 [root@localhost:/bin] esxcli hardware  cpu list|gr ...

  5. [转帖]解决vCenter6.x由于证书过期问题无法登录

    https://www.dinghui.org/vcenter-sts-certificate.html#:~:text=%E8%BF%99%E6%97%B6%E5%80%99%EF%BC%8C%E5 ...

  6. [转帖]【Redis】Redis中使用Lua脚本

    Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua具体语法参考:https://www.runoob. ...

  7. 【转帖】千亿参数大模型首次被撬开!Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布

    https://cloud.tencent.com/developer/article/1991011 千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI圈发生了一件轰动的事情-- Met ...

  8. [转帖]ARMv8架构概述、相关技术文档以及ARMv8处理器简介

    ARMv8架构 文章目录 ARMv8架构 参考文档 ARMv8架构的概述 从32位到64位的变化The changes from 32 bits to 64 bits 1,Larger registe ...

  9. 如何在proto3中用上golang对应的interface{}类型

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 首先,我希望所有golang中用于http请求响应的结构, ...

  10. Go 泛型发展史与基本介绍

    Go 泛型发展史与基本介绍 Go 1.18版本增加了对泛型的支持,泛型也是自 Go 语言开源以来所做的最大改变. 目录 Go 泛型发展史与基本介绍 一.为什么要加入泛型? 二.什么是泛型 三.泛型的来 ...