基於技術:Json.net + Jquery + Jstree
員工:賬戶名(原賬戶:+自定義) 密碼 姓名 部門(樹形) 職務(員工 主管 經理 總監 副總裁 總裁)
使用角色(多選) (其他:入職時間 工號 花名 手機 郵箱 座機 )
部門:客服(售前 售后) 運營 財務 倉儲 (自定義)
角色:倉儲物流 活動運營 美工設計 商品管理 售前客服 售后客服 等 (自定義)
權限:基於角色分配權限+補充權限
菜單:不同用戶不同權限對應不同菜單
《一》表設計如下:
Employee 員工
Department 部門
Role 角色
Permission 權限
RolePermission 為角色標識權限
Menu 菜單
MenuPermission 為菜單標識權限
Department 部門:
department_id
department_name
parent_id
level 第一級為1
sort_order
status
main_id 主賬號Id
Employee 子賬號基本信息:
employee_id 子賬號Id
employee_name 用戶名(zhangsan:no1)
employee_pwd
full_name 姓名
main_id 主賬號Id
main_name 主賬號用戶名
department_id
permissions 多選 ,隔開 補充權限
roses 多選 ,隔開
…………………………
status 1正常 -1刪除 2凍結
create_time
modified_time
Role 子賬號角色
role_id 角色id
role_name 角色名
permissions 所擁有權限 ( Permission[])
description 角色描述
main_id 主賬號Id
create_time 創建時間
modified_time 修改時間
Permission:權限信息
permission_id
permission_code 權限編碼 string類型
permission_name 權限名稱
parent_code 父權限code
is_authorize 1 :允許授權 2:不允許授權 6:不允許授權但默認已有權限
Menu:菜單
menu_id
menu_name
menu_url
parent_id
sort_order
status
MenuPermission:菜單權限
id
menu_id
permissions 權限標識
SubUserPermission 實體 子賬號所擁有的權限對象(直接賦予的權限和通過角色賦予的權限的總和對象)
permissions 子賬號被直接賦予的權限點列表 Permission []
roles 子賬號被賦予的角色信息(Role)列表。Role [] 列表中的角色對象只有role_id,role_name,permissions信息
《二》初始化-綁定-獲取-設置選中 權限樹
例子:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript" src="jquery.jstree.js"></script> <script type="text/javascript"> $(function(){ var checkNodeIds = "12,22".split(","); $("#roleTree").jstree({ "themes": {"theme": "default", "dots": true, "icons": false },//設置有虛線,不顯示文件夾圖標 "json_data": { "ajax": { "url": "jsondata.ashx" } }, "plugins": ["themes", "json_data", "checkbox", "ui"] // html_data json_data 可以用html格式或者json格式 }) .bind("loaded.jstree", function (event, data) {//tree load完才做其他事 $("#roleTree").jstree("open_all"); $("#roleTree").find("li").each(function() { for (var i = 0; i < checkNodeIds.length; i++) { if ($(this).attr("id") == checkNodeIds[i]) { //alert($(this).attr("id")); $("#roleTree").jstree("check_node", $(this)); break; } } }) }); }); // 獲取選中id function checkForm(obj) { var ids = checkForm2(obj); alert(ids); } function checkForm2(obj) { var ids =[]; $.jstree._reference($("#roleTree")).get_checked(obj).each(function(i, n) { ids.push(n.id); if ($(this).find("> ul").length > 0) { ids.push(checkForm2($(this))); } }); return ids; } //根據ids數組 初始化選中 function setCheckedNode(ids){ //$.jstree._reference('#roleTree').uncheck_all(); $("#roleTree").jstree("uncheck_all");//清空 if(ids!=""){ var tempCheckStr=ids.split(','); $(tempCheckStr).each(function(i,item){ //$.jstree._reference('#roleTree').check_node("#"+item); $("#roleTree").jstree("check_node","#"+item); }) } } </script>
HTML:
<div id="roleTree" style="text-align:left; background-color:#FFFFFF;"> </div> <button onclick="checkForm()">查看選中的節點ID</button> <button onclick="setCheckedNode('3,31,32,33')">設置節點ID選中</button>
JSON格式:
[
{
"data": "諸葛亮",
"attr": {
"id": "1"
},
"children": [
{
"data": "諸葛亮1",
"attr": {
"id": "11"
},
"children": [
{
"data": "諸葛亮12",
"attr": {
"id": "112"
}
},
{
"data": "諸葛亮13",
"attr": {
"id": "113"
}
}
]
},
{
"data": "諸葛亮2",
"attr": {
"id": "12"
}
},
{
"data": "諸葛亮3",
"attr": {
"id": "13"
}
}
]
},
{
"data": "權限",
"attr": {
"id": "3"
},
"children": [
{
"data": "權限1",
"attr": {
"id": "31"
}
},
{
"data": "權限2",
"attr": {
"id": "32"
},
"children": [
{
"data": "曹操1",
"attr": {
"id": "21"
}
}
]
},
{
"data": "權限3",
"attr": {
"id": "33"
},
"children": []
}
]
}
]
部門樹

if(typeof departmentTree === 'undefined'){ departmentTree = {}; } jQuery.extend(departmentTree, CustomEvent); //渲染部門列表 departmentTree.getDepartmentHtml = function(data, isSub){ var html = '', ul = (isSub)? '<ul class="sub">': '<ul>'; html += ul; for(var i = 0, l = data.length; i < l; i++){ var item = data[i]; html += '<li>'; html += '<a href="#" key="department" departmentId="' + item.attr.id + '">' + item.attr.title + '</a>'; if(typeof(data[i].children) === 'object'){ //如果有子項,則遞歸 html += departmentTree.getDepartmentHtml(item.children, true); } html += '</li>'; } html += '</ul>'; return html; };
部門樹json格式:
{
"data": [
{
"data": {
"title": "學無止境-曾祥展"
},
"attr": {
"id": 123456,
"parentId": 0,
"title": "學無止境-曾祥展",
"level": 1
},
"state": "open",
"children": [
{
"data": {
"title": "xxx"
},
"attr": {
"id": 1212121,
"parentId": 123456,
"title": "xxxxx",
"level": 2
},
"children": [
{
"data": {
"title": "子部門"
},
"attr": {
"id": 454545454,
"parentId": 1212121,
"title": "子部門",
"level": 3
}
},……
}
主賬號擁有所有權限,子賬戶分配不同角色(可以多個),可以補充權限滿足需求,
用戶權限不同,顯示菜單也不同,粒度可到每一個操作權限……
針對需求,靈活設計……
