每個系統都離不開權限控制,這里來說說頁面上控制到按鈕的思路,僅提供思路:
使用 角色 + 資源(菜單和菜單對應頁面上的按鈕)+ 授權的方式。
1 定義角色與用戶;
假定這里我們只控制到角色這一層次,一個用戶一個角色,設計如下:
角色表: role(role_id, role_name)
用戶表: user(user_id, username, role_id),其中role_id是角色表的外鍵。
2 定義資源
這里假定把菜單、按鈕都看成是一種資源,一個菜單上面有多個按鈕。
菜單表: menu(menu_id, nemu_name, menu_url)
按鈕表: operation(btn_id, btn_code, btn_name, btn_title, menu_id) btn_title 為提示
按鈕表,其中menu_id 區分這個按鈕是屬於那一個頁面,btn_code 存這個按鈕在頁面上的組件ID,這個在一個頁面下應該是唯一的,方便后續頁面定位她。比如我的HTML頁面A,有一個按鈕 <input type='button' id='saveBtn' ......這里 btn_code 就存 saveBtn。
3 錄入資源
錄入菜單與對應按鈕到菜單表和按鈕表,數據根據開發的頁面而來。
假如我有2個頁面
a.html (頁面有2個按鈕,保存 id: saveBtn,刪除 id: deleteBtn );
b.html (頁面有2個按鈕,新增 id: addBtn,提交 id: submitBtn );
那么我錄入的數據應該是:
菜單表:
(1,a頁面, /a.html)菜單ID假設是1
(2,b頁面, /b.html)菜單ID假設是2
按鈕表:
(1, saveBtn, 保存, 保存按鈕,1)
(2, deleteBtn, 刪除, 刪除按鈕,1)
(3, addBtn, 新增, 新增按鈕,2)
(4, submitBtn, 提交, 提交按鈕,2)
4 設計授權表
配置角色對資源的訪問權限,角色與資源多對多,設計如下:
權限表: author(id, role_id, resource_id, resource_type) 注釋: id, 角色ID,資源ID, 資源類型(菜單還是按鈕)
5 錄入授權數據
錄入角色與資源的權限關系,此時某個角色能夠訪問的資源數據已經有了,包括菜單和按鈕。
進入頁面控制:
進入頁面之前,根據用戶拿到角色,根據當前訪問的菜單,拿到有權限的按鈕;
頁面初始化完成后(比如jQuery.ready()),根據按鈕ID,有權限的按鈕顯示,沒權限的按鈕隱藏(所以之前按鈕要保存頁面的組件ID);