子使用者-角色-許可權-菜單 淺談:子賬戶設計方案

來源:互聯網
上載者:User

基於技術: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;                }            }        }) });});// 擷取選中idfunction 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                            }                        },……

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

針對需求,靈活設計……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.