子用戶-角色-權限-菜單 淺談:子賬戶設計方案


基於技術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
                            }
                        },……

}
主賬號擁有所有權限,子賬戶分配不同角色(可以多個),可以補充權限滿足需求,
用戶權限不同,顯示菜單也不同,粒度可到每一個操作權限……

針對需求,靈活設計……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM