基於SHIRO的管理後台許可權認證系統實現(一)

2021-09-02 11:57:15 字數 2789 閱讀 3149

[align=center][size=large]基於shiro的管理後台許可權認證系統實現(一)[/size][/align]

一、專案需求:

1.優化原有的管理後台的許可權管理

原角色許可權管理:

2.許可權細粒度化

許可權對應具體的某乙個選單、頁面上的按鈕

3.分配靈活

與具體的部門、職位不再關聯

二、專案實現

1.使用者表 user

[table]

|id|使用者id|

|name|使用者登入名|

|password|使用者密碼|

|status|離職在職|

[/table]

備註:密碼加密使用shiro自帶的功能,不可逆;登入驗證時,將使用者輸入的密碼按照同樣規則加密與庫中儲存的密碼比較

2.許可權表 permission

[table]

|id|許可權id|

|name|許可權名稱|

|value|字串表示|

|pid|許可權父類id|

|type|型別:按鈕or選單|

[/table]

備註:許可權對應於管理後台以後的功能;需提前整理好;預先將資料錄入到表中

由於許可權要精確到頁面按鈕,故對已有資料資源進行整理,分級

舉例:許可權新增功能以樹狀圖形展示,故需要有pid,pid即上一級的許可權的編號

pid=0,根目錄

以pid=0為父類的是一級選單

再以一級選單作為pid的是其所屬的子集選單,子集選單分為按鈕和選單兩種

頁面展示位樹形,在後端將資料組裝後

使用:為使用者授權時,勾選許可權前面的核取方塊,將使用者與許可權的關聯儲存在關聯表中

3.使用者與許可權關聯表 user_permission

[table]

|id|主鍵|

|userid|使用者id|

|permissionid|許可權id|

[/table]

4.角色表 role

[table]

|id|主鍵|

|name|角色名稱|

|value|字串表示|

[/table]

5.使用者角色關聯表 user_role

[table]

|id|主鍵|

|userid|使用者id|

|roleid|角色id|

[/table]

6.角色許可權關聯表 role_permission

[table]

|id|主鍵|

|roleid|角色id|

|permissionid|許可權id|

[/table]

7.名詞解釋

身份及憑證:即使用者登入名以及密碼;呼叫doauth方法進行驗證,底層實現即為通過username查詢user表,比較password

角色:許可權的集合;為使用者分配一批許可權

許可權:使用者可以執行的功能

8.具體實現

8.1 許可權管理頁面

展示:列表頁面:提供新增、修改、刪除按鈕;頁面內容採用摺疊覆蓋的方式,只展示一級的選單,一級選單相應的二級以及其他級別選單隱藏;

新增按鈕:列表頁面上面的新增按鈕為新增一級選單,一級選單上的新增按鈕為新增二級選單,以此類推

備註:刪除許可權的同時,刪除與該許可權有關的其他表中的資料,以免存在髒資料

8.2 角色管理頁面

授權:跳轉新頁面,展示所有許可權列表

規定:一級許可權的pid = 0 ;

二級許可權的pid = 0 ;

**許可權的pid = 相應的二級許可權的id

以此類推

配置前端進行除錯,將資料已多重集合的方式組裝,左側提供核取方塊,勾選相應的許可權,提交儲存到角色許可權關聯表中

備註:刪除同上

8.3 使用者管理頁面

列表:展示當前所有使用者

使用者可按照另乙個維度進行劃分展示:職位、部門、分組等等

角色:展示角色列表,新增角色

許可權:特殊授權,是使用者分配角色的功能的補充,意思是使用者在獲得一批許可權後還想擁有另乙個職能中的乙個檢視許可權,即可通過授權來完成

8.4 說明:

具體的實現過程中是通過比較 許可權的字串或角色的字串來實現的

9.許可權判斷的實現

9.1 使用者登入

使用者登入過程中,首先做認證驗證,如果身份憑證不符,即不允許登入;

使用者登入成功,做授權認證,通過

userid --> user_role --> list--> role_permission --> list

userid --> user_permission --> list

取兩個集合的並集並去重,使用set處理

9.2 將此集合放入使用者登入的session中(shiro本身維護的session,可通過配置檔案進行維護)

9.3 許可權認證

在每乙個action上方配置許可權標籤,即請求該action需有此許可權(即表中存放的字串)

9.4 若使用vm

可通過vm的自定義函式實現頁面上的按鈕展示的判斷--即細粒度的許可權實現

10.其他

10.1

總得設計思想:

首先建立乙個admin使用者,手動建立直接插入資料庫中

建立使用者及分配許可權

後續建立的使用者登入成功後,會按照框架的設計走許可權驗證

簡單的說,許可權認證就是從資料庫中讀取此使用者擁有的許可權

此處,需要注意,由於session的時效性的原因,使用者登入成功後直到使用者退出前,他的許可權都不會改變;可以修改底層的快取實現,進而可以實現,admin修改使用者許可權後,不需退出登入即可變更許可權。

博文參考:

[url]

Shiro許可權管理

shiro許可權管理 一.許可權管理的四張核心的表關係 使用者表使用者 角色 關係表 角色表角色 許可權 關係表 許可權表角色 選單 關係表 選單表二.許可權的控制項 粗粒度配置檔案配置 細粒度通過註解實現 三.了解認證和授權的流程 前端發起登入請求 訪問shiro的subject subject....

Shiro許可權管理

1.sql語句許可權表 create table role id int not null auto increment comment id name varchar 20 not null comment 角色名稱 description varchar 200 comment 描述 prima...

基於RABC許可權管理的後台管理專案新許可權的設計思想

說到許可權很多人都會想到rbac,acl等等,這些方案都是十分成熟的許可權管理方案,最早寫php用yii2框架的時候,就自帶了rbac許可權管理,也對rbac比較熟悉,但今天想說的不僅僅侷限於路由許可權。關於rbac許可權管理gg可以出一堆文章,基於角色的訪問控制,把一堆路由分配給乙個角色,然後把一...