Java 實現系統許可權控制思路

2021-07-25 11:44:34 字數 1742 閱讀 1504

首先介紹下思路:

1、使用者表 user;

2、角色表 role;

3、選單 menu;

4、角色選單許可權表 role_menu;

5、使用者選單許可權表 user_menu;

如圖:

根據使用者角色取出該角色所有許可權,並對使用者進行許可權分配;注意選單的按鈕(新增、刪除、修改)許可權是放在中間表(user_menu)中的;

1、新增使用者時,是要根據使用者角色進行分配許可權的 一定記得批量新增;批量、批量、批量,重要的事情說三遍,不要查詢角色許可權,然後for迴圈,這樣效率太低了;

sql如下:

insert into sys_user_menu(userid, menuid, delpower,    updpower,    inspower,    viewpower)

select # userid, menuid, 1 delpower, 1 updpower, 1 inspower, 1 viewpower from sys_role_menu where roelid = #

updpower 預設都是有的 所以都是1,這樣根據角色查詢出許可權直接新增,響應時間大大提公升;

2、修改使用者角色也要記得重新分配使用者許可權哦!這個不能忘,可以用上面的方法;

業務方法:

如果角色沒有修改,是不用重新分配許可權的,所有userrole 重置為 null,如果角色修改則刪除原許可權,重新進行分配;

3、最後要優化的就是根據使用者查詢許可權的時候啦,我最開始是這樣做的,查詢角色許可權,使用者許可權,返回到前端,前端進行處理;結果就是很卡 基本上要三到四秒,

解決方案,一步到位;乙個查詢返回全部資料。

如下sql:

select menu.menuid id, parentid pid, menuname text,

(select count(1) from sys_user_menu where userid = # and  menuid = sm.menuid) isshow,

(select concat(

(case when smenu.inspower = 1 then 1 else 0 end), ',',

(case when smenu.delpower = 1 then 1 else 0 end), ',',

(case when smenu.updpower = 1 then 1 else 0 end), ',',

(case when smenu.viewpower = 1 then 1 else 0 end))

from sys_user_menu smenu where smenu.userid = #

and  smenu.menuid = sm.menuid) menuinfo

from sys_role_menu sm inner join sys_menu menu on sm.menuid = menu.menuid

where roelid = #

首先根據 角色id查詢出許可權,然後子查詢使用者是否有該許可權,有返回1 木用返回 0;

最後按鈕許可權 我是直接拼接成字串,分別對應 新增、刪除、修改、檢視 1 有該按鈕 0 沒有該按鈕;

優化後 不管是新增、修改使用者,載入使用者許可權都能控制在 1~2 秒;

Java 實現系統許可權控制思路

首先介紹下思路 1 使用者表 user 2 角色表 role 3 選單 menu 4 角色選單許可權表 role menu 5 使用者選單許可權表 user menu 如圖 根據使用者角色取出該角色所有許可權,並對使用者進行許可權分配 注意選單的按鈕 新增 刪除 修改 許可權是放在中間表 user ...

系統許可權設計思路

許可權系統通常包括如下基本元素 使用者 角色 許可權 資源 操作。角色分類 總經理 部長 員工。在實際中乙個使用者可能存在多個角色,這就要考慮到許可權累加處理 許可權分類 如 員工考勤許可權 審核許可權 等等。在給角色分配許可權過程中,可以批量分配許可權,也可以單一處理,比如 首頁,這就應該開放給所...

前 後端分離許可權控制設計和實現思路

前 後端分離許可權控制設計和實現思路 簡述近幾年隨著react angular vue等前端框架興起,前後端分離的架構迅速流行。但同時許可權控制也帶來了問題。網上很多前 後端分離許可權僅僅都僅僅在描述前端許可權控制 且是較簡單 固定的角色場景,滿足不了我們使用者 角色都是動態的場景。且僅僅前端進行許...