後臺管理系統 – 權限管理

不管是開發手機APP,網站還是小程序等項目,基本上都需要一個後臺管理系統的支撐。而每個後臺管理系統都有一個通用的功能就是用戶權限管理。最近基於Antd+React.js做了一個後臺管理系統。

 


一、概要

權限管理是一個幾乎所有後臺系統的都會涉及的一個重要組成部分,主要目的是對整個後臺管理系統進行權限的控制,而針對的對象是員工,避免因權限控制缺失或操作不當引發的風險問題,如操作錯誤,數據泄露等問題。

就目前來說最廣泛的是一個賬號對應多個角色,每個角色對應相應的權限集(RBAC模型)這種模型基本可以應對所有的問題,且通過角色可以實現靈活且多樣的的權限操作需求。

權限管理中設計到三個重要的名詞:賬號、角色、權限。

  • 賬號:每個用戶想要進入系統需要分配一個賬號,而這個賬號就是一把鑰匙。我們通過控制賬號所具備的權限,進而控制這個用戶的授權範圍。
  • 角色:角色管理是確定角色具備哪些權限的一個過程,他是一個集合的概念,是衆多最小權限顆粒的組成。我們通過把權限給這個角色,再把角色給賬號,從而實現賬號的權限,因此它承擔了一個橋樑的作用。
  • 權限:權限包括頁面權限,操作權限,數據權限。頁面權限控制你可以看到哪個頁面,看不到哪個頁面;操作權限則控制你可以在頁面上操作哪些按鈕;數據權限則是控制你可以看到哪些數據。

二、思考

瞭解很很多網上給出的權限管理方案,絕大部分解決方案都是事先定義好角色和各個角色的權限。如果換一個系統,由於角色和之前的不一樣,後臺管理系統需要從代碼層面做相應的修改。個人感覺這種前線管理通用性不強。因此想有沒有什麼方式把權限的顆粒度劃分的更細,角色和權限可以自由配置。

帶着這些疑問整理了自己對權限管理的理解和解決方案,本人非專業WEB端開發,只是提出個人見解,有不對的地方希望大家指正。上面也說了權限主要分爲頁面權限、操作權限和數據權限,我想從這三個方面細化並做成可自由配置。

頁面權限控制:頁面權限主要通過菜單配置和頁面跳轉操作來控制。一般進入後臺管理系統會呈現出主菜單,我們可以在角色管理中爲每一個角色配置不同的菜單。用戶使用賬號登錄時,後臺通過判斷該賬號的角色,返回對應的菜單,這樣就可以控制用戶的一級頁面的權限。對於二級頁面及其他頁面可以通過控制用戶操作權限來限制用戶訪問。

操作權限控制:操作權限主要控制用戶哪些按鈕可以點擊,哪些按鈕不可以點擊。我們可以事先爲頁面中要控制的按鈕定義一個標識,在獲取用戶菜單時一併返回,通過檢查當前用戶是有有這個標識來判斷是否有相應的操作權限。

數據權限控制:我理解的數據權限控制是角色有哪些接口調用的權限,防止用戶跨域或者跨權限調用接口,我們需要把接口和角色菜單關聯起來,調用接口時後臺檢測當前用戶的角色是否有調用該接口的權限,如果沒有權限則調用失敗。整個權限管理中我覺得這一塊是最複雜的,需要配置所有使用到的接口,還需要對每次接口調用進行檢測,雖然可以通過正則表達式去匹配,但是還是有一定的侷限性。另外對於非常大的系統,這個工作量是非常大的,所以這套權限控制方案不一定適用非常複雜的系統。

三、詳細介紹

以下介紹以下我根據我的想法實現的權限管理功能(項目還有很多需要改進的地方,歡迎各位大神指點O(∩_∩)O~)

1.、工作臺預覽

以下是目前正在開發系統的整體佈局,基於React.js+Antd開發,左側菜單列表可以通過角色控制,不同角色返回的菜單不一樣。

 

2、用戶管理

這個沒有什麼好說的,就是管理用戶信息的地方。這裏其實有一個可以優化的地方,一個用戶應該可以對應多個角色,這一塊我簡化了一下,每一個用戶只有一個角色。每一個角色有一個權限級別,爲數值1-9表示,值越大權限越大,每一個角色只能修改權限比其小的用戶信息,否則操作按鈕置灰。

 

3.角色管理

角色可根據自身系統業務需求,隨意增刪改查,無需事先定死角色類型,每個角色後面有一個權限管理入口,在那個頁面給麼給角色動態分配權限。

4.菜單管理

配置後臺管理系統中的所有菜單,每一個菜單後面有一個“功能”按鈕,在裏面可以配置當前菜單中的功能點,細化到頁面中的每個按鈕,爲每個功能點定義一個標識符,前端根據該標識符判斷該用戶是否有操作權限。

5.頁面功能

這裏統一管理頁面中的功能項,包括功能名稱以及對應的標識符,比如add,delete,edit,view分別代表增刪改查按鈕權限標識。

6.功能接口

系統是使用前後端分離的實現方式開發,爲了防止跨域訪問或者跨角色訪問,後臺需要對每個接口的調用進行權限檢查,這裏需要配置所有用到的接口,再把接口和菜單對應起來。前端訪問調用接口時,後臺檢測其合法性。

7.菜單功能配置

上面配置了菜單和頁面操作項標識,點擊菜單管理中每一個菜單後面的“功能”按鈕,進入菜單和功能點關聯配置的界面。當前菜單中有哪些操作需要控制就添加那些操作的標識,前端通過這個標識判斷用戶是否在當前菜單頁面中有該操作權限。

8.菜單接口關聯配置

上面有提到,前後端分離,後臺要檢測接口調用權限,在這裏配置菜單功能項和接口的關聯,也就是說當前菜單中哪一個功能允許調用哪些接口在這記錄下來,或者也可以把接口和角色關聯起來,也許會更簡單一些。

9.角色頁面權限管理

前面角色列表界面中可以看到在每個角色後面有一個權限按鈕,點擊裏面可以爲每個角色配置相應的菜單。實現不同角色顯示不同菜單的效果。

 

 

四、總結

以上是個人總結的一套權限管理解決方案,優點是可以對角色權限自由配置,權限顆粒度劃分比較細,目前來看比較大的缺點就是配置比較複雜,特別是接口和各個功能點標識的配置。大家如果有什麼其他更好的解決方案,希望能多多交流,學習學習。

五、其他

以上哪裏寫的不對或者有待改進,歡迎大家提意見,謝謝!
轉載請註明出處:http://www.luoxudong.com/?p=442

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章