閒話權限系統的設計

1、權限的本質

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

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

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

2、資源的概念

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

2.1 資源的識別

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

2.2 有限的資源

資源有不少,但並非全部資源都是咱們在當前領域須要關心的,咱們要從全部資源中,整理出那些是受保護的有限資源。
兩個定語:受保護,有限。設計


公開的且無限的資源,不須要保護了(固然不是徹底不須要),好比陽光,好比之前的空氣。可是,隨着工業化的發展,空氣也愈來愈須要保護了。
水資源,雖然說是公開的,可是它是有限的,因此須要嚴格保護。野生動物,森林,都是須要保護的,它們的數量都是有限的。
因爲人類活動範圍的持續增大,幾乎地球上全部的資源都不夠了,總有一天,陽光也會成爲稀缺的資源。因此,資源老是給人一種有限的感受。代理

正由於資源是有限的特色,咱們不能隨意而且大量的使用,因此須要對這些資源進行保護,要訪問(使用)資源,須要受權。
因此,權限就是對受保護資源的有限許可訪問對象

3、權限的概念

3.1 權限的分類

 權限並非一個獨立的東西,它不是主體,是客體,因此它必須依附於一個主體。因此,咱們經常根據權限所依附的主體來給權限分類:資源

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


功能權限是指可訪問的頁面、菜單、按鈕等,這些功能通常都在軟件的「視圖層」;
業務權限是指能夠處理的一類業務,一般包含不少功能,好比一個功能,A業務能夠修改,可是B業務只能查詢;
數據權限是指哪些數據能夠被什麼對象訪問。一般在數據庫級別進行控制,好比:一樣一個表,員工只能查詢,經理能夠修改。開發

3.2 權限的控制模型

    權限,實質上分爲權限的受體和權限的配體,權限的受體在資源對象上,而權限的配體是權限訪問者持有的訪問祕鑰,能夠用細胞分子來理解受體和配體。只有當受體和配體有效結合之後,才表明權限執行成功,被訪問的資源的狀態發生了改變。能夠用鎖來舉例理解,要開鎖必須有鑰匙,鑰匙是權限的「配體」,而鎖是權限的受體。鎖接受了鑰匙成功進行了配對,打開了鎖,因而人打開了門,進入了房間,那麼房間這個資源的狀態就改變了。
    另外,權限還要區分擁有者和執行者,訪問受保護資源的訪問者,只要持有表明行使權限的訪問祕鑰,那麼訪問者就能夠訪問這個資源,也就說這個訪問者有了訪問這個資源的權限。
  這裏有三個關鍵詞:訪問者,資源,祕鑰


  訪問者就是是權限的執行者,它能夠是權限的擁有者,也能夠是權限擁有者受權的代理人,就像公司的董事長和總經理的關係,董事長受權總經理經營管理公司,總經理表明董事長行使公司資產使用的權利。可是無論誰來行使訪問權限,都要持有訪問資源的祕鑰,好比銀行帳戶的密碼。其實這個過程,作過微服務權限控制,都能明白。

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

3.3 權限的受權

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

總結

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

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

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

相關文章
相關標籤/搜索