天天看點

Java權限管理分析(一)Java權限管理分析(一)

Java權限管理分析(一)

目錄

  • Java權限管理分析(一)
    • 1. 權限管理原理
      • 1.1 概述
      • 1.2 名詞解釋
      • 1.3 使用者認證
        • 1.3.1 概述
        • 1.3.2 認證流程
        • 1.3.3 關鍵對象
      • 1.4 使用者授權
        • 1.4.1 概述
        • 1.4.2 授權流程
        • 1.4.3 關鍵對象
        • 1.4.4 總結
    • 2. 設計思路
      • 2.1 說明
      • 2.2 模型設計
      • 2.3 資料庫設計
      • 2.4 配置設定權限
    • 3. 總結

1. 權限管理原理

1.1 概述

目前大多數應用的系統都需要權限管理,來實作對使用者通路資源的控制,按照一定的規則或政策來控制使用者通路且隻可以通路擁有權限的資源。好比公司裡産品開發、市場、運維、測試等職位,大家負責自己的業務,互相獨立,也互相聯系、協作,共同完成任務。

權限管理包括授權和認證兩部分。

1.2 名詞解釋

使用者/賬号(User) :系統給每個使用者配置設定的賬号,這個賬号就像一把key,使用者可以通過這個賬号來進行對系統資源的通路和操作,系統則通過這個賬号來識别不同的使用者,配置設定對應的資源權限。

角色(Role):是統一權限的集合,是衆多權限顆粒的組成,權限的載體,好比一串鑰匙。通常會把具體權限賦予給到角色,使用者擔任該角色,進而實作權限的配置設定管理,是以它承擔了橋梁的作用。

例如:系統管理者、運維員、普通使用者。

權限(Permission):包括頁面、操作、資料等方面。是對系統中的某個功能或資源讀取或操作的權利,真正達到對系統資料安全的保護。

1.3 使用者認證

1.3.1 概述

簡單來說,就是使用者在進行身份驗證的時候,提供其身份資訊和憑證,系統驗證使用者的合法性,通過驗證後才可以正常通路系統。

常見的驗證方法:

  • 使用者名&密碼
  • 指紋打卡機
  • 證書驗證

1.3.2 認證流程

Java權限管理分析(一)Java權限管理分析(一)

1.3.3 關鍵對象

  • subject:主體,了解為使用者,可能是程式,都要去通路系統的資源,系統需要對subject進行身份認證。
  • principal:身份資訊,通常是唯一的,一個主體還有多個身份資訊,但是都有一個主身份資訊(primary principal)
  • credential:憑證資訊,可以是密碼 、證書、指紋。

1.4 使用者授權

1.4.1 概述

簡單了解為通路控制,在使用者認證通過後,系統對使用者通路資源進行控制,使用者具有資源的通路權限方可通路。

1.4.2 授權流程

Java權限管理分析(一)Java權限管理分析(一)

1.4.3 關鍵對象

授權過程可用了解為:WHO對WHAT(WHICH)進行HOW操作

  • who:指主體(subject)在通過認證後系統對其進行通路控制。
  • what(which):資源(resource),權限所控制的東西就叫資源。比如:添加部落格,部落格清單頁面,部落格資訊

    資源分為資源類型和資源執行個體

    使用者資訊就是資源類型,相當于java類

    id為001的使用者就是資源執行個體,相當于new出來的java對象

1.4.4 總結

使用者認證就是通過使用者的身份資訊或憑證資訊來驗證其身份,驗證(登入)通過後,就到授權了,系統根據該使用者的角色來判斷其權限,提供其可用的資源。

2. 設計思路

2.1 說明

一個使用者可以擁有多個權限,同時一個權限也可以賦予多個使用者,那麼使用者和權限就是多對多的關系,需要角色來維護和連結使用者和權限之間的關系。通過使用者關聯角色,角色關聯權限,進而達到使用者和權限的一個間接關聯關系。而使用者和角色,角色和權限也是多對多的全系,進而也需要引入使用者角色和角色權限兩張中間表來實作。

2.2 模型設計

​ (1) 每一個使用者包含的屬性有使用者ID,使用者名稱,密碼,使用者狀态等基本屬性。

​ (2) 每一個角色包含的屬性有角色ID,角色名稱,狀态等基本屬性。

​ (3) 每一個權限包含的屬性有權限ID,權限名稱,URL,權限編碼,父級ID,權限類型,狀态等基本屬性。

Java權限管理分析(一)Java權限管理分析(一)

2.3 資料庫設計

通用權限管理的資料庫設計一般都是五張表,三張主表,兩張關系表。

  • 使用者表:儲存使用者的基本資訊(使用者id、使用者名、密碼、狀态、。。。)
  • 使用者角色關系表:儲存使用者和角色的關系(使用者id、角色id、。。。)
  • 角色表:儲存角色的基本資訊(角色id、名稱、辨別、狀态、。。。)
  • 角色權限關系表:儲存角色和權限的關系(角色id、權限id、。。。)
  • 權限表:儲存權限具體可操作的内容(權限id、連結url、類型、辨別、。。。)
Java權限管理分析(一)Java權限管理分析(一)

上圖僅為個人項目的模型設計,在企業開發中可以根據自身系統特點進行修改,實作更加合适,完整的權限管理體系。

2.4 配置設定權限

一般權限的配置設定都是管理者來進行操作,先分析該角色會具有哪些權限,然後将權限賦予給角色,讓指定使用者來擔任該角色。

通常使用者配置設定到的權限資訊都需要持久化儲存在資料庫中。

3. 總結

對于大多數管理系統來說,都需要對使用者進行權限管理,來保證系統資料的安全。對角色和權限自由配置,權限顆粒度細化,配置簡單明了,這才是普遍需要,能夠接受的優秀的解決方案。

本文提供的僅為通用設計,網上也有許多前輩總結出來的優秀解決方案,後續Max會整理出來于大家分享,希望大家能夠關注Max,一起學習交流。

以上哪裡寫的不對或需要改進,歡迎大家提出,謝謝啦!