閑話權限系統的設計


一、權限的本質

權限管理,首先要理清權限的本質:權限就是對受保護資源的有限許可訪問。
理解了權限的本質,就好談權限的管理了。

權限就是對受保護資源的有限許可訪問--這句話包含兩層含義:
1,受保護的資源
2,有限的許可訪問

但,本質上談的都是對資源的訪問,所以探討權限問題,首先要定義資源。

二、資源的概念

    資源是一個抽象的概念,按照百科的詞條解釋,“資源”是指一國或一定地區內擁有的物力、財力、人力等各種物質要素的總稱。分為自然資源和社會資源兩大類。前者如陽光、空氣、水、土地、森林、草原、動物、礦藏等;后者包括人力資源、信息資源以及經過勞動創造的各種物質財富等。
    在計算機軟件中,資源指的是軟件使用過程中使用的各種對象,功能,文件,網絡等各種要素的總稱。比如一個按鈕所操作功能也算是一種資源;這樣,菜單,按鈕,頁面等等,都可以算是資源。甚至,數據庫的某個字段,也是資源。如果按照RESTFull API的思路去理解資源可能更好理解。

2.1 資源的識別

    資源多了,管理起來也有點麻煩,比如一個軟件有很多按鈕,要搞清楚這些按鈕是比較困難的。把資源硬編碼一個代號,對資源進行命名,對一類資源進行組織歸類,這樣復雜的系統就好管理了。

2.2 有限的資源

資源有很多,但並不是所有資源都是我們在當前領域需要關心的,我們要從所有資源中,整理出那些是受保護的有限資源。
兩個定語:受保護,有限。


公開的且無限的資源,不需要保護了(當然不是完全不需要),比如陽光,比如以前的空氣。但是,隨着工業化的發展,空氣也越來越需要保護了。
水資源,雖說是公開的,但是它是有限的,所以需要嚴格保護。野生動物,森林,都是需要保護的,它們的數量都是有限的。
由於人類活動范圍的持續增大,幾乎地球上所有的資源都不夠了,總有一天,陽光也會成為稀缺的資源。所以,資源總是給人一種有限的感覺。

正因為資源是有限的特點,我們不能隨意並且大量的使用,所以需要對這些資源進行保護,要訪問(使用)資源,需要授權。
所以,權限就是對受保護資源的有限許可訪問

三、權限的概念

3.1 權限的分類

 權限並不是一個獨立的東西,它不是主體,是客體,所以它必須依附於一個主體。所以,我們常常根據權限所依附的主體來給權限分類:

  •   按照授權方式區分的權限類型:部門權限,人員權限,角色權限。
  •   按照軟件層級區分:功能權限,業務權限,數據權限。


功能權限是指可訪問的頁面、菜單、按鈕等,這些功能一般都在軟件的“視圖層”;
業務權限是指可以處理的一類業務,通常包含很多功能,比如一個功能,A業務可以修改,但是B業務只能查詢;
數據權限是指哪些數據可以被什么對象訪問。通常在數據庫級別進行控制,比如:同樣一個表,員工只能查詢,經理可以修改。

3.2 權限的控制模型

    權限,實質上分為權限的受體和權限的配體,權限的受體在資源對象上,而權限的配體是權限訪問者持有的訪問秘鑰,可以用細胞分子來理解受體和配體。只有當受體和配體有效結合以后,才代表權限執行成功,被訪問的資源的狀態發生了改變。可以用鎖來舉例理解,要開鎖必須有鑰匙,鑰匙是權限的“配體”,而鎖是權限的受體。鎖接受了鑰匙成功進行了配對,打開了鎖,於是人打開了門,進入了房間,那么房間這個資源的狀態就改變了。
    另外,權限還要區分擁有者和執行者,訪問受保護資源的訪問者,只要持有代表行使權限的訪問秘鑰,那么訪問者就可以訪問這個資源,也就說這個訪問者有了訪問這個資源的權限。
  這里有三個關鍵詞:訪問者,資源,秘鑰


  訪問者就是是權限的執行者,它可以是權限的擁有者,也可以是權限擁有者授權的代理人,就像公司的董事長和總經理的關系,董事長授權總經理經營管理公司,總經理代表董事長行使公司資產使用的權利。但是不管誰來行使訪問權限,都要持有訪問資源的秘鑰,比如銀行賬戶的密碼。其實這個過程,做過微服務權限控制,都能明白。

  權限系統,跟國家的權力架構一樣,也分為制定權限資源(立法),執行權限訪問(司法),授予權限(行政)。組成權限系統的3個部分是相互分立,相互制約的。把權限系統的原理搞清楚了,那么設計權限系統的程序,就很簡單了,能夠做到完備且靈活。

3.3 權限的授權

    權限系統里面最常出現的就是角色,這叫做角色授權,當系統權限多了,勢必要對權限進行一個分組(分類),這就是角色。所以,角色,僅僅是一個權限集合而已,因此授權的時候按角色授權要方便些,。但實際上,也可以按部門授權,或者按個人授權,或者,3者交叉授權。所以,最終一個系統的權限管理,復雜就復雜在這個地方,而如果權限授權不清晰,也容易出現推諉,扯皮的事情。所以,管理者授權,是很考驗管理智慧的地方。

總結

權限系統分為三大部分:
1,系統使用的資源(菜單,按鈕,頁面,數據等等有限的可操作可訪問的對象);
2,權限的識別,對資源系統中找出那些是需要進行受保護訪問的而不是公開可操作的資源,對這樣的資源進行分組和命名;
3,權限的授權(按角色授權,按部門授權,按個人授權等);
 

以上內容是我多年開發使用各種管理系統,並且最近跟朋友討論的一點暢想,一家之言,僅供參考。

 我的博客即將搬運同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM