最近看公司的**,對許可權管理頗有興趣,恰好今天有空,就記錄了以下,如果有錯誤,還望指正正統表結構:
從圖上可以看出,表結構主要有user role function 三個表,分別對應使用者、角色、功能,通過這三張表完成許可權的控制和實現。
user 與 role 是多對多關係,使用第三方userrole表來維護
role 與 function 同樣也是多對多的關係,多個角色對應多個功能(每個模組都有對應的id,功能即模組,即menu),使用第三方表rolefunction來維護
大概思路:
使用者登陸時載入選單,根據使用者查詢使用者角色,根據使用者角色查詢使用者功能,將查詢到乙個menu code,然後返回這些menu code
在控制層在根據menu code 獲取並載入選單
但是無法對每個menu 中的按鈕許可權進行控制(比如新增、刪除、審核)
解決辦法:在role和function的第三方表中插入一列:menu_btn,代表該該角色下的功能擁有什麼樣的按鈕許可權
然後查詢時,封裝乙個擁有menu_btn的實體類menu,用來記錄許可權,如果沒有任何button,則不顯示任何選單
專案做法:
表結構:
t_sys_user 使用者表
t_sys_role 角色表
t_sys_user_role 使用者角色關係表
t_sys_menu 功能表
t_sys_role_privilege 按鈕許可權
[關於許可權按鈕列表]:
系統有固化的許可權按鈕,新增,修改,刪除,檢視,審核..
名稱對應:add_btn,mod_btn,del_btn,view_btn,audit_btn…應:add_btn,mod_btn,del_btn,view_btn,audit_btn…
多個使用者對應多個角色 , 使用第三方表t_sys_user_role維護
許可權管理中的授權問題:
乙個使用者可以對應多個角色,a角色的操作許可權和b角色的操作許可權有衝突,那該以誰的為準?
下面有幾種解決方案:
合併許可權,將a角色的許可權和b角色的許可權合併 √
在檢視上給使用者選擇,讓使用者可以切換角色,操作麻煩 ×
如果角色之間有授權衝突,則不允許授權 ×
允許使用者對衝突角色進行授予,讓使用者在授予許可權時,設定角色的優先順序,當角色衝突時,以優先順序高的角色為準 √
公司**分析:
// 定義乙個map,用來儲存選單許可權
mapret = new hashmap();
// 查詢出許可權並新增,使用sql直接查詢menu,不查role,即不例項化role,即可避免這個問題,但是btns又擁有這個問題,待解決
listpriviletlist = sysroleprivilegedao.findbyuserroleprivilege(userid);
for (sysroleprivilege rp : priviletlist)
return ret;
問題解決,思路大概是按照解決方案一
新問題: btns問題
a role 對應 a menu - btn_add, btn_query
b role 對應 a menu - btn_add, btn_delete
如果arole和brole都賦給user1那麼許可權以誰的為準?
// todo 貌似是公司**bug,待考證
**展示:
專案的許可權管理是根據當前使用者的型別,決定要顯示的選單 從而實現許可權管理的功能
當載入menu時,會在控制層根據當前登陸使用者獲取選單:
/* 功能選單資料獲取 */
}return ret; // 這裡在mvc配置檔案中配置了json轉換器,spring mvc會自動幫你將集合轉換為json字串,傳送給jsp,使用js進行選單的顯示
}
list
list = menuservice.menusofuser(session);
menusofuser方法:
@service("menuservice")
public
class
menuservice
// 其他普通使用者
mapmenus = sessionuser.getprivilege();
// 如果沒有許可權選單,返回空
if (menus == null || menus.size() == 0)
listresult = new arraylist();
for (sysmenu sysmenu : menulist)
}return result;}}
許可權設計javaweb
許可權是企業應用中常見限制關係,比如說有專案,成員兩種類,成員對專案的許可權不一,對不同專案還有不同許可權,怎麼設計這樣的系統呢?對於這樣的系統一種常見的處理方式是固化,就是按等級給定許可權,比如部門經理擁有所有專案的crud許可權,專案經理只對自己的專案有crud許可權,一般成員只有r許可權,這樣...
Java Web應用許可權控制
我自己的一點想法,希望對你的思路有所借鑑。有什麼意見和提議,可以發郵件和我交流 liujiansong gmail.com user 使用者定義表 id integer,auto increamtal,pk name varchar 80 not null other fields login id...
Javaweb上傳Linux 沒有讀寫許可權
linux檔案訪問預設許可權與umask有關,檢視系統預設配置 etc profile 是否正常,如果是002或022就正常沒有問題。umask 002 對應檔案許可權664,資料夾許可權775 umask 022對應檔案許可權644,資料夾許可權755 開啟bin catalina.sh檔案,檢查...