更新時(shí)間:2022-11-17 11:37:04 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2022次
開(kāi)發(fā)軟件:JDK7.0、MyEclipse 2014
數(shù)據(jù)庫(kù):MySQL5.6
服務(wù)器:Tomcat7.0
本系統(tǒng)采用了 B/S 架構(gòu),以 MySql 作為數(shù)據(jù)庫(kù)管理數(shù)據(jù),以 JSP 作為前端開(kāi)發(fā)語(yǔ)音,采用當(dāng)前最流行的 SSM 框架(Spring+SpringMVC+MyBatis),標(biāo)準(zhǔn)的 MVC 模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,controller 層,service 層,dao 層四層。下面介紹主要功能:
1.權(quán)限管理
支持在線分配權(quán)限,以角色為表頭、菜單為首列。動(dòng)態(tài)加載角色、菜單以及權(quán)限,個(gè)性化呈現(xiàn)所有信息于一表之中,并且在表中設(shè)置權(quán)限開(kāi)關(guān),免去跳轉(zhuǎn)頁(yè)面的繁瑣步驟。橫為角色,縱為菜單,用戶體驗(yàn)極高的設(shè)計(jì)相信深得用戶青睞。

2.角色管理
以樹(shù)的形式呈現(xiàn)出角色,呈現(xiàn)出用戶數(shù)量、菜單數(shù)量已經(jīng)按鈕數(shù)量,完美整合增刪改操作!

3.菜單管理
以樹(shù)的形式呈現(xiàn)出菜單,完美整合增刪改操作!整合更改菜單圖標(biāo)功能,以及整合該菜單下按鈕功能。

4.按鈕管理
按鈕信息管理,完美整合按鈕的增刪改查功能。所有頁(yè)面將根據(jù)權(quán)限動(dòng)態(tài)加載按鈕。
5.用戶管理
對(duì)系統(tǒng)用戶進(jìn)行管理,完美整合分頁(yè)功能。

1.數(shù)據(jù)庫(kù)關(guān)系圖
用戶通過(guò)角色與菜單進(jìn)行關(guān)聯(lián),簡(jiǎn)單地說(shuō),一個(gè)用戶擁有若干角色,每一個(gè)角色擁有若干菜單,菜單包含按鈕,每一個(gè)角色擁有若干按鈕,構(gòu)造成用戶-角色-菜單-按鈕的授權(quán)模型,用戶與角色之間,角色與權(quán)限之間,都是多對(duì)多的關(guān)系。

2.數(shù)據(jù)庫(kù)視圖
整個(gè)系統(tǒng)包含用戶表、賬號(hào)表、角色表、菜單表、按鈕表、按鈕類型表、用戶角色關(guān)聯(lián)表、角色菜單關(guān)聯(lián)表、角色按鈕關(guān)聯(lián)表,如下圖:

3.數(shù)據(jù)表結(jié)構(gòu)
用戶表:t_auth_user

角色表:t_auth_role

菜單表 :t_auth_menu

按鈕表:t_auth_action

用戶角色關(guān)聯(lián)表:t_auth_roleuser

角色菜單關(guān)聯(lián)表:t_auth_rolemenu

角色按鈕關(guān)聯(lián)表:t_auth_roleaction

賬號(hào)表:t_auth_account

按鈕類型表:t_auth_actiontype

1.以權(quán)限功能為例,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"><!-- 頁(yè)面加載完畢后自動(dòng)生成 --></span>
<span class="childTitle">/ 配置角色權(quán)限</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">全部展開(kāi)</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;">注:點(diǎn)擊開(kāi)關(guān)系統(tǒng)自動(dòng)保存,若保存成功沒(méi)任何提示,若保存失敗則彈出錯(cuò)誤提示內(nèi)容。</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
2.jQuery代碼塊
/**
* 保存權(quán)限信息
*/
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("系統(tǒng)繁忙,請(qǐng)聯(lián)系管理員...", 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;
}
});
}
/**
* 綁定樹(shù)形菜單表格
*/
function tableRender(){
// 遍歷角色
var checkboxs = '';
$.ajax({
type: "post",
url: ligent_itemName + "auth/role/findByAll",
async: false,//異步為true
success: 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: '菜單等級(jí)', 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();
// 第一次加載默認(rèn)全部展開(kāi)
if(renderCount == 0){
treeTable.openAll(tableIns);
renderCount++;
}
// 關(guān)閉關(guān)閉所有層
layer_closeAll();
}
});
}
3.服務(wù)器代碼塊
/**
* 獲取所有角色權(quán)限信息
*/
@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;
}
以上就是“關(guān)于Java權(quán)限管理系統(tǒng)的案例”介紹,大家如果想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下本站的Java畢業(yè)設(shè)計(jì),相信對(duì)大家的學(xué)習(xí)一定會(huì)有所幫助的。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)