SpringBoot+Shiro+LayUI权限管理系统项目-6.实现角色管理
1.说明
只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取。
2.功能展示


3.业务模型
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_role")
public class SysRole implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 角色id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 角色名称
*/
private String roleName;
/**
* 角色编码
*/
private String roleCode;
/**
* 创建时间
*/
@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 List<SysUser> userList;
@TableField(exist=false)
private boolean checked;
}
4.控制器
@Controller
@RequestMapping("/sysRole")
public class SysRoleController {
@Autowired
private SysRoleService roleService;
@Autowired
private SysMenuService menuService;
@Autowired
private SysRoleUserService roleUserService;
@GetMapping("listUI")
public String listUI() {
return "role/list";
}
@GetMapping("selectMenu/{id}")
public String selectMenu(@PathVariable Integer id, Map<String,Object> map) {
SysRole role = roleService.getById(id);
map.put("role", role);
return "role/selectMenu";
}
@PostMapping("list")
@ResponseBody
public Result<IPage<SysRole>> list(@RequestParam(defaultValue = "1") Integer pageNo,
@RequestParam(defaultValue = "10") Integer pageSize) {
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
Page<SysRole> page = new Page<>(pageNo,pageSize);
IPage<SysRole> result = roleService.selectRoleList(page, null);
// 设置总记录数
result.setTotal(roleService.count(queryWrapper));
/*Pager pager = JsonUtil.getObjectFromJson(gridPager, Pager.class);
Map<String, Object> parameters = null;
if(Validator.isNullOrEmpty(pager.getParameters())){
parameters = new HashMap<>();
}else{
parameters = pager.getParameters();
}
Integer deptId = getUserEntity().getDeptId();
if(Validator.isNotNullOrEmpty(parameters.get("deptId"))){
deptId = Integer.parseInt(parameters.get("deptId").toString());
}
Page<SysRole> list = roleService.selectRoleList(new Page<SysRole>(pager.getNowPage(), pager.getPageSize()),deptId);
makeGridResult(parameters, pager, list);*/
return ResultUtil.ok(result);
}
@GetMapping("form")
public String form(Map<String,Object> map) {
return "role/form";
}
@OperLog(operModule = "用户管理",operType = "修改",operDesc = "修改角色")
@PostMapping("save")
@ResponseBody
public Result<String> add(@RequestBody SysRole role){
if(role.getId()==null){
role.setCreateTime(new Date(System.currentTimeMillis()));
role.setUpdateTime(new Date(System.currentTimeMillis()));
}else
{
role.setUpdateTime(new Date(System.currentTimeMillis()));
}
if(!roleService.saveOrUpdate(role)){
return ResultUtil.fail("保存失败!");
}
return ResultUtil.ok();
}
@OperLog(operModule = "角色管理",operType = "删除",operDesc = "删除角色")
@PostMapping("/remove")
@ResponseBody
public Result<String> remove(@RequestParam Integer id) {
// 判断该角色下是否有用户
QueryWrapper<SysRoleUser> roleUserQuery = new QueryWrapper<>();
roleUserQuery.eq("role_id",id);
int roleUserCount = roleUserService.count(roleUserQuery);
if(roleUserCount > 0){
return ResultUtil.fail("该角色下存在用户!");
}
// 先删除角色和权限关系记录
roleService.deleteRoleMenu(id);
// 删除角色记录
roleService.removeById(id);
return ResultUtil.ok();
}
/**
* 根据角色ID查询角色
* @param map
* @param roleId
* @return
*/
@GetMapping("{roleId}/select")
public String select(Map<String,Object> map,@PathVariable(required=true) Integer roleId) {
SysRole role = roleService.getById(roleId);
map.put("role", role);
return "role/edit";
}
@GetMapping("{roleId}/menu")
public String permission(Map<String,Object> map,@PathVariable(required=true) Integer roleId) {
SysRole role = roleService.getById(roleId);
List<SysMenu> resources = menuService.queryMenuList(ConvertUtil.toMap("roleId",(Object)roleId));
List<JSTreeEntity> jstreeList = new TreeUtil().generateJSTree(resources);
map.put("role", role);
map.put("menus", jstreeList);
return "role/menu";
}
/**
* 根据角色ID查询角色拥有的菜单权限
* @param roleId
* @return
*/
@GetMapping("/getMenu/{roleId}")
@ResponseBody
public List<SysMenu> getMenu(@PathVariable(required=true) Integer roleId) {
List<SysMenu> menus = menuService.queryMenuList(ConvertUtil.toMap("roleId",(Object)roleId));
return menus;
}
@OperLog(operModule = "角色管理",operType = "修改",operDesc = "分配权限")
@PostMapping("saveMenu")
@ResponseBody
public Result<String> saveMenu(Integer roleId, @RequestParam(value = "menuIds[]") Integer[] menuIds){
roleService.saveMenu(roleId, Arrays.asList(menuIds));
return ResultUtil.ok();
}
@GetMapping("listAll")
@ResponseBody
public List<SysRole> listAll(){
List<SysRole> sysRoles = roleService.selectRoleList(null);
/*List<SelectEntity> selectList = new ArrayList<>();
SelectEntity entity = null;
for (SysRole role: sysRoles
) {
entity = new SelectEntity();
entity.setId(role.getId());
entity.setName(role.getRoleName());
selectList.add(entity);
}*/
return sysRoles;
}
}
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>
<table class="layui-hide" id="SysRole" lay-filter="SysRole"></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-inline">
<input type="text" id="roleName" name="roleName" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">角色编码</label>
<div class="layui-input-inline">
<input type="text" id="roleCode" name="roleCode" required lay-verify="required" autocomplete="off"
placeholder="" class="layui-input">
</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="closeBtn">关闭</button>
</div>
</div>
</form>
</div>
</div>
<script type="text/html" id="roleToolBar">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="add" shiro:hasPermission="role:add">新增</button>
<button class="layui-btn layui-btn-sm" lay-event="addMenu" shiro:hasPermission="role:addMenu">分配权限</button>
</div>
</script>
6 获取源码
捐赠任意金额,评论区留下邮箱发送 :)

SpringBoot+Shiro+LayUI权限管理系统项目-6.实现角色管理的更多相关文章
- 基于easyUI实现权限管理系统(三)——角色管理
此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. role.jsp:角色管理界面 <!DOCTYPE html PUBLIC "-//W3 ...
- SpringBoot框架的权限管理系统
springBoot框架的权限管理系统,支持操作权限和数据权限,后端采用springBoot,MyBatis,Shiro,前端使用adminLTE,Vue.js,bootstrap-table.tre ...
- SpringBoot&Shiro实现权限管理
SpringBoot&Shiro实现权限管理 引言 相信大家前来看这篇文章的时候,是有SpringBoot和Shiro基础的,所以本文只介绍整合的步骤,如果哪里写的不好,恳请大家能指出错误,谢 ...
- Asp.Net Core 项目实战之权限管理系统(6) 功能管理
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- SpringBoot+Shiro学习(七):Filter过滤器管理
SpringBoot+Shiro学习(七):Filter过滤器管理 Hiwayz 关注 0.5 2018.09.06 19:09* 字数 1070 阅读 5922评论 1喜欢 20 先从我们写的一个 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(27)-权限管理系统-分配用户给角色 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展 ...
- spring boot + mybatis + layui + shiro后台权限管理系统
后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...
- niaobulashi-一个基于springboot shrio的权限管理系统
github项目地址:https://github.com/niaobulashi/niaobulashi springboot学习地址:http://www.ityouknow.com/spring ...
- .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目
系列目录 [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...
- (一)shiro简介和用户登录demo及角色管理
一.shiro简介 Apache Shiro是Java的一个安全框架.Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境.Shiro可以帮助我们完成 ...
随机推荐
- [转帖]聊聊字符串数据长度和nls_length_semantics参数
字符串是我们设计数据库经常用到的类型,从传统的ASCII格式到UTF-8格式,不同应用需求对应不同的字符类型和长度配置.针对Oracle而言,最常用的类型无外乎char和varchar2两个基本类型. ...
- [转帖]使用 TiUP 部署运维 TiDB 线上集群
https://docs.pingcap.com/zh/tidb/stable/tiup-cluster 本文重在介绍如何使用 TiUP 的 cluster 组件,如果需要线上部署的完整步骤,可参考使 ...
- [转帖]大模型训练,英伟达Turing、Ampere和Hopper算力分析
https://www.eet-china.com/mp/a219195.html 大 GPU 优势在于通过并行计算实现大量重复性计算.GPGPU即通用GPU,能够帮助 CPU 进行非图形相关程序的运 ...
- [转帖]台积电3nm工艺细节曝光
https://weibo.com/ttarticle/p/show?id=2309404853901739557561&sudaref=www.baidu.com 2023年1月3日消息 ...
- [转帖]012 Linux 搞懂用户权限升级 (sudo 和 su),包学会
https://my.oschina.net/u/3113381/blog/5431540 Linux 系统中 root 账号通常用于系统的管理和维护,对操作系统的所有资源具有访问控制权限,当一个普通 ...
- 为什么Kubernetes和容器与机器学习密不可分?
原文出自infosecurity 作者:Rebecca James 京东云开发者社区编译 当前,数字化转型的热潮在IT领域发展的如火如荼,越来越多的企业投身其中,机器学习和人工智能等现代技术的融合在公 ...
- Android APP升级时解析程序包时出现问题
一个新的测试机在自动下载升级安装更新版本APP时,报出"解析程序包时出现问题"错误.原因众说纷纭, 一番搜索,下面的回答比较全面: https://stackoverflow.co ...
- RocketMQ—引言
RocketMQ-引言 MQ介绍 在学习RocketMQ之前,我们先来看以下MQ的意思. MQ是Message Queue的首字母缩写. Message:意思为消息,在我们生活中可以是一句话/一个短信 ...
- python代码的tab和空格缩进互转
代码规范 在我们项目中python代码使用tab缩进,并统一大家的编辑器设置. 如果同一个python文件中即有空格又有tab缩进,那么运行此文件会报错. 关于使用空格还是tab,这里就不展开讨论了, ...
- 从零开始配置vim(23)——lsp基础配置
上一章,我们初步认识了lsp,并且对 nvim-treesitter插件进行了配置,为编辑器提供了代码着色.自动格式化以及增量选中功能.算是初步体验了 lsp的相关功能.从这篇开始我们通过lsp的功能 ...