Java权限管理系统完整案例
一、在线演示
在线演示,浏览系统
二、开发工具
开发软件:JDK7.0、MyEclipse 2014
数据库:MySQL5.6
服务器:Tomcat7.0
三、系统介绍
本系统采用了 B/S 体系结构,以 MySql 作为数据库管理数据,以 JSP 作为前端开发语音,采用当前最流行的 SSM 框架(Spring+SpringMVC+MyBatis),标准的 MVC 模式,将整个系统划分为表现层,controller 层,service 层,dao 层四层。下面介绍主要功能:
3.1 权限管理
支持在线分配权限,以角色为表头、菜单为首列。动态加载角色、菜单以及权限,个性化呈现所有信息于一表之中,并且在表中设置权限开关,免去跳转页面的繁琐步骤。横为角色,纵为菜单,用户体验极高的设计相信深得用户青睐。
3.2 角色管理
以树的形式呈现出角色,呈现出用户数量、菜单数量已经按钮数量,完美整合增删改操作!
3.3 菜单管理
以树的形式呈现出菜单,完美整合增删改操作!整合更改菜单图标功能,以及整合该菜单下按钮功能。
3.4 按钮管理
按钮信息管理,完美整合按钮的增删改查功能。所有页面将根据权限动态加载按钮。
3.5 用户管理
对系统用户进行管理,完美整合分页功能。
四、数据库设计
4.1 数据库关系图
用户通过角色与菜单进行关联,简单地说,一个用户拥有若干角色,每一个角色拥有若干菜单,菜单包含按钮,每一个角色拥有若干按钮,构造成用户-角色-菜单-按钮的授权模型,用户与角色之间,角色与权限之间,都是多对多的关系。
4.2 数据库视图
整个系统包含用户表、账号表、角色表、菜单表、按钮表、按钮类型表、用户角色关联表、角色菜单关联表、角色按钮关联表,如下图:
4.3 数据表结构
- 用户表:t_auth_user
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
userID | bigint | 20 | 自增编号 |
accountID | bigint | 20 | 账户编号 |
userName | varcha | 200 | 用户姓名 |
avatar | varchar | 200 | 头像 |
sig | varchar | 500 | 签名 |
createTime | varchar | 200 | 创建时间 |
createUserID | bigint | 20 | 创建人编号 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 角色表:t_auth_role
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
roleID | bigint | 20 | 自增编号 |
roleName | varchar | 200 | 菜单名称 |
roleAlias | varchar | 50 | 角色别名 |
parentID | varchar | 50 | 父级编号(最高级为0) |
roleRank | int | 11 | 角色等级(值越低等级越高) |
content | varchar | 500 | 描述内容 |
createTime | varchar | 200 | 创建时间 |
createUserID | bigint | 20 | 创建人编号 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 菜单表 :t_auth_menu
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
menuID | bigint | 20 | 自增编号 |
menuType | tinyint | 4 | 菜单类型(1iframe模式,2全屏模式,3外部链接,4通讯系统) |
menuName | varchar | 200 | 菜单名称 |
menuText | varchar | 200 | 菜单文本 |
menuPath | varchar | 255 | 菜单路径 |
menuIcon | varchar | 255 | 菜单图标 |
menuSort | int | 11 | 菜单排序 |
parentID | bigint | 20 | 父级编号(0代表根目录) |
menuLevel | tinyint | 4 | 菜单等级 |
isRoot | tinyint | 4 | 是否根目录(1是,0否) |
content | varchar | 500 | 描述内容 |
createTime | varchar | 200 | 创建时间 |
createUserID | bigint | 20 | 创建人编号 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 按钮表:t_auth_action
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
actionID | bigint | 20 | 自增编号 |
menuID | bigint | 20 | 菜单编号 |
actionName | varchar | 200 | 按钮名称 |
actionType | bigint | 20 | 按钮类型(类型表) |
actionSeat | tinyint | 4 | 按钮位置(1头部按钮,2表格按钮) |
callType | tinyint | 4 | 调用方式(1样式,2函数,3Layui) |
actionEvent | varchar | 200 | 按钮路径 |
actionIcon | varchar | 200 | 按钮图标 |
actionSort | int | 11 | 按钮排序 |
content | varchar | 500 | 描述内容 |
createTime | varchar | 200 | 创建时间 |
createUserID | bigint | 20 | 创建人编号 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 用户角色关联表:t_auth_roleuser
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
ruID | bigint | 20 | 自增编号 |
roleID | bigint | 20 | 角色编号 |
userID | bigint | 20 | 用户编号 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 角色菜单关联表:t_auth_rolemenu
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
rmID | bigint | 20 | 自增编号 |
roleID | bigint | 20 | 角色编号 |
menuID | bigint | 20 | 菜单编号 |
- 角色按钮关联表:t_auth_roleaction
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
raID | bigint | 20 | 自增编号 |
roleID | bigint | 20 | 角色编号 |
actionID | bigint | 20 | 按钮编号 |
- 账号表:t_auth_account
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
accountID | bigint | 20 | 自增编号 |
userCode | varchar | 200 | 用户账号 |
userPwd | varchar | 200 | 用户密码 |
userQQ | varchar | 200 | QQ账号 |
userWechat | varchar | 200 | 微信账号 |
userWeibo | varchar | 200 | 微博账号 |
isFrozen | tinyint | 4 | 是否被冻结(1已冻结,0没冻结) |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
- 按钮类型表:t_auth_actiontype
字段名 | 类型 | 长度 | 描述 |
---|---|---|---|
typeID | bigint | 20 | 自增编号 |
typeName | varchar | 200 | 类型名称 |
typeSort | int | 11 | 类型排序 |
isValid | tinyint | 4 | 是否有效(1有效数据,0无效数据) |
五、部分源码
5.1 以权限功能为例,html代码块
<div class="layui-fluid" id="LAY-component-progress"><div class="layui-row layui-col-space15"><div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header"><span class="childHeader"><!-- 页面加载完毕后自动生成 --></span><span class="childTitle">/ 配置角色权限</span></div><div class="layui-card-body"><div class="layui-form"><div class="table-operate-btn" style="margin-bottom: 10px;"><div class="table-operate-btn"><button data-type="openAll" type="button" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-event">全部展开</button><button data-type="closeAll" type="button" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-event">全部折叠</button><button data-type="refresh" type="button" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-event">刷新</button></div></div><table id="table-page" class="layui-table" lay-filter="table-filter" lay-size="sm"></table><blockquote class="layui-elem-quote" style="display: none;">注:点击开关系统自动保存,若保存成功没任何提示,若保存失败则弹出错误提示内容。</blockquote></div></div></div></div></div>
</div>
5.2 jQuery代码块
/*** 保存权限信息*/
function handlePower(keyId, roleId, isCheck){var tableName = keyId.substr(0, keyId.indexOf("-"))var tableKeyId = keyId.substr(keyId.indexOf("-")+1, keyId.length);var action = null;if(tableName == "action"){action = ligent_itemName + "auth/power/handleRoleAction"}else if(tableName == "menu"){action = ligent_itemName + "auth/power/handleRoleMenu"}else{layer_msg("系统繁忙,请联系管理员...", 5, 6, null);return;}var checkNum = isCheck ? 1 : 0;var data = {roleId: roleId,actionId: tableKeyId,menuId: tableKeyId,isCheck: checkNum}$.post(action, data, function (res) {var json = JSON.parse(res);if(json.code != 0) {layer_msg(json.data.msg, 5, 6, null);return;}});
}/*** 绑定树形菜单表格*/
function tableRender(){// 遍历角色var checkboxs = '';$.ajax({type: "post",url: ligent_itemName + "auth/role/findByAll",async: false,//异步为truesuccess: function (data) {var state = JSON.parse(data);var json = state.data;$.each(json, function (i, item) {checkboxs += '' + '{' + ' title: "'+item.roleName+'", align: "center", width: "120px",' + ' template: function (res) {' + " return '<input '+(res.checkMap.isCheck_"+item.roleId+" ? 'checked' : '')+' keyId=\"'+res.id+'\" roleId=\""+item.roleId+"\" type=\"checkbox\" name=\"close\" lay-skin=\"switch\" lay-text=\"ON|OFF\" lay-filter=\"isCheckPower\">';" + '}' + '},'; });}});var cols = "[" +"{ key: 'title', title: '菜单按钮', align: 'left', width: '200px', " + "template: function (res) {" + "if (res.treeLevel == 1) {" + "return '<span class=\"onelevelColor\">' + res.title + '</span>';" + "} else if (res.treeLevel == 2) {" + "return '<span class=\"twolevelColor\">' + res.title + '</span>';" + "} else if (res.treeLevel == 3) {" + "return '<span class=\"threelevelColor\">' + res.title + '</span>';" + "}" + "}" + "}," + checkboxs + "{ key: 'treeLevel', title: '菜单等级', align: 'center', width: '120px'," + "template: function (res) {" + "if (res.treeLevel == 1) {" + "return '<span class=\"onelevelColor\">' + res.treeLevel + '</span>';" + "} else if (res.treeLevel == 2) {" + "return '<span class=\"twolevelColor\">' + res.treeLevel + '</span>';" + "} else if (res.treeLevel == 3) {" + "return '<span class=\"threelevelColor\">' + res.treeLevel + '</span>';" + "}" + "}" + "}," + "{ title: '类型', align: 'center', width: 120," + "template: function (res) {" + "if (res.id.indexOf('menu') != -1) {" + "return '菜单';" + "} else if (res.id.indexOf('action') != -1) {" + "return '按钮';" + "} else {" + "return '';" + "}" +"}," + "}" + "]";var cols_arr = eval("("+cols+")")// 渲染表格tableIns = treeTable.render({elem: '#table-page',url: ligent_itemName + 'auth/power/findByPower',icon_key: 'title',primary_key: 'id',parent_key: 'pid',cols: cols_arr,end: function (e) {// 渲染表单form.render();// 展示温馨提示$(".layui-elem-quote").show();// 第一次加载默认全部展开if(renderCount == 0){treeTable.openAll(tableIns);renderCount++;}// 关闭关闭所有层layer_closeAll();}});
}
5.3 服务器代码块
/*** 获取所有角色权限信息*/
@RequestMapping(value = "findByPower", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")public @ResponseBody String findByPower(HttpServletRequest request, HttpServletResponse response) {List<TreeTable> revertList = new ArrayList<TreeTable>();List<AuthAction> actionList = null;TreeTable treeTable = null;// 菜单集合List<AuthMenu> list = authMenuService.findByAll();for (AuthMenu menu : list) {treeTable = new TreeTable(menu, authRoleService.findByMenu(menu.getMenuId()));revertList.add(treeTable);if(menu.getIsRoot().intValue() != 1){actionList = authActionService.findByMenu(menu.getMenuId());for (AuthAction action : actionList) {treeTable = new TreeTable(action, menu.getMenuLevel(), authRoleService.findByAction(action.getActionId()));revertList.add(treeTable);}}}String json = UseTool.toJson(new StateModel(revertList));log.info("获取所有角色列表:"+json);return json;}
六、源码下载
附上权限系统源码,点击下载
七、猜您喜欢
更多小系统与您见面:搭我一程
创作不容易,若对您有帮助,欢迎收藏,记得赏个好评
。
Java权限管理系统完整案例相关推荐
- c# mysql 管理员权限_C# winform 权限管理系统完整源码下载(含数据库)
[实例简介] [实例截图] [核心代码] using System; using System.Collections.Generic; using System.ComponentModel; us ...
- SSM 企业权限管理系统 项目实战
企业权限管理系统 完整项目github地址: https://github.com/lindaifeng/Authority-Management-System 新增项目: SpringBoot企业权 ...
- java登录ssh没有权限管理_ssh2--login 是Java的权限管理系统,有完整的程序及代码,很全面的概括了 的功能。 Develop 238万源代码下载- www.pudn.com...
文件名称: ssh2--login下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 9083 KB 上传时间: 2013-03-18 下载次数: 105 提 供 者 ...
- 视频教程-权限管理系统-项目实战-Java
权限管理系统-项目实战 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥50.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订 ...
- 视频教程-基于springboot2.x+layui+shiro+redis整合前后端分离的权限管理系统-Java
基于springboot2.x+layui+shiro+redis整合前后端分离的权限管理系统 拥有八年的Java项目开发经验,擅长Java.vue.SpringBoot.springCloud.sp ...
- 视频教程-SpringBoot+Security+Vue前后端分离开发权限管理系统-Java
SpringBoot+Security+Vue前后端分离开发权限管理系统 10多年互联网一线实战经验,现就职于大型知名互联网企业,架构师, 有丰富实战经验和企业面试经验:曾就职于某上市培训机构数年,独 ...
- java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava
此权限管理系统把待访问的业务层方法做为权限管理中的资源,通过spring aop 对接口方法进行拦截,来实现权限的管理,可以实现细粒度的权限控制. 在上文体验了spring aop 一些特性,aop ...
- JAVA健康档案管理系统(含论文开题)一套完善的毕业设计,系统具有完整的源代码和数据库源码
JAVA健康档案管理系统(含论文开题)一套完善的毕业设计,系统具有完整的源代码和数据库源码下载链接:https://pan.baidu.com/s/1HkPmpEUXHqEkAXmXAE8RXA 提取 ...
- Java项目:实现权限管理系统(java+SpringBoot+MyBatis+AOP+LayUI+Mysql)
源码获取:博客首页 "资源" 里下载! springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统. 共五个模块,角色管理,菜单管理,实验室管理,学生管理,管 ...
- java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程
第1章 课程整体概述与权限管理系统介绍 1-1 为什么企业级项目需要权限管理 1-2 权限管理的核心是什么? 1-3 理想中的权限管理应该是什么样的? 1-4 主流开源权限管理框架有哪些? 1-5 1 ...
最新文章
- 动圈耳机振膜_耳机中的动圈、动铁、圈铁都是什么意思 买哪种最好?
- Python爬虫教程(四)
- 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境
- Tree-CNN:一招解决深度学习中的「灾难性遗忘」
- HTTP缓存及其使用
- 企业开发中,git提交时屏蔽某些文件,怎么搞!【idea的处理方法】
- 【LeetCode】回文数
- AFN\HTTPS\UIWebView
- Python网络数据采集系列-------概述
- opencv30-图像矩
- 8月20日全球六大国际域名解析量变化情况统计报告
- C# 修改Config文件,增删查改
- 【VBScript恶搞代码】电脑自爆警告
- office2019 图目录_【设计图文】电磁阀体中心孔组合机床、机床总体工位布置和钻、扩、铰工位液压系统设计(有cad图)...
- elastichd的使用教程_ElasticHD
- 三大变换与自控(五)三角函数的正交性证明
- 淘宝 喵铺脚本自动签到脚本
- Visual Studio 2017 企业版密匙
- 根据上面的products列表写一个循环,不断询问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,终用户输入q退出时,打印购买的商品列表。
- 徒手撸一个好玩的App:美图
热门文章
- Doom启示录(一)---李乃峰所崇拜之 两个约翰!
- 关于java小游戏的暂停,退出和从新开始
- 数据结构c语言版编程软件,数据结构严蔚敏4版PDF下载_数据结构C语言版严蔚敏下载 完整版_当载软件站...
- xp计算机u盘重装系统,用U盘给旧电脑重装XP系统,自己摸索的方法:两大步骤、两个关键...
- java模板导出excel_POI导出excel模板三种方式
- 【c语言课程设计】C语言校园卡管理系统
- docker安装jdk1.8
- 摄像头实时画面转接到web页面
- wps 甘特图_强烈推荐5款在线甘特图工具,又简单又清爽又好用
- 图解设计模式:责任链模式