MASA Auth - 從用戶的角度看整體設計

来源:https://www.cnblogs.com/MASA/archive/2022/06/07/16351988.html
-Advertisement-
Play Games

用戶 在系統里,用戶是一個核心概念。它代表了一個人的唯一身份標識,除了與角色、團隊、組織架構等有關,甚至還會影響到在同一個界面不同的用戶操作流程與顯示內容都會發生變化,再複雜一點的話,或許在同一個系統內的一個用戶進入到不同產品後的身份也會變化 用戶與角色 用戶可以擁有一個或多個角色,讓角色作為許可權組 ...


用戶

在系統里,用戶是一個核心概念。它代表了一個人的唯一身份標識,除了與角色、團隊、組織架構等有關,甚至還會影響到在同一個界面不同的用戶操作流程與顯示內容都會發生變化,再複雜一點的話,或許在同一個系統內的一個用戶進入到不同產品後的身份也會變化

用戶與角色

用戶可以擁有一個或多個角色,讓角色作為許可權組,將一組或多組許可權間接的分配給用戶

user-role.png

用戶與團隊

用戶可以在多個團隊中,每個團隊可以擁有一個或多個角色,將一組或多組許可權通過角色與團隊關聯,並賦予團隊內的成員

團隊內成員可以是內部的,也可以是外部的。通過統一的用戶表作為人的唯一身份標識。再通過Employee和ThirdPartyUser區分用戶身份屬性。

team-role.png

用戶與組織架構

用戶可以被指定在組織架構的某一個節點中

但組織架構是一個虛擬的樹形結構,它歸屬於業務,所以沒有與許可權直接關聯

除此之外,組織架構有時候很難表示角色繼承關係。在同一個組織架構節點中的不同成員常常會具有不同的角色,且上下級關係也未必會作為上下級節點緊貼在一起。有部分公司上下級之間可能隔了幾個層級

組織架構在我們早期定義中是與許可權關聯且沒有團隊這個概念的。但實際上項目制在很多公司內部都存在,以項目制運行時,人員的許可權和虛擬組織關係會頻繁變化。導致常常要在組織架構調整和大量個人許可權微調上做抉擇,為了徹底解決這種割裂的行為。我們把組織架構看作虛擬的樹形結構來描述每個人的部門歸屬權,同時採用團隊的方式解決項目制下人員頻繁進出和四處作戰而引發的許可權變更問題

user-org.png

用戶與許可權

用戶除了擁有角色以外,可能還存在個別特殊業務下需要臨時性授予或禁用部分許可權

雖然與RBAC2有一點衝突,但事實上這樣的場景的確存在,比如即將離職的財務需要臨時收回付款功能,這裡明顯要違背互斥原則,在設計上我們的選擇是擴展許可權的優先順序高於角色內包含的許可權。這樣可以通過對沖達到收回部分敏感許可權的功能

user-permission.png

用戶類型

用戶有三種類型:終端用戶,員工,駐場員工

舉個例子:

  • A是公司員工,擁有內部許可權。同時也是公司產品的終端用戶
  • B是駐場員工,擁有部分內部許可權。同時也是公司產品的終端用戶

user-employee.png

用戶許可權優先順序

用戶的許可權應該具有一定的優先順序,來解決同一個業務下多個許可權同時生效時系統該選擇激活哪一個

我們將採用以下規則:

  1. 超級管理員/管理員

    超級管理員為系統管理員,管理員為指定項目的管理員

  2. 用戶的擴展配置許可權

  3. 用戶的角色許可權

    用戶的角色許可權衝突時,拒絕優先順序高於允許,低於用戶的擴展配置許可權

  4. 團隊的預設角色許可權

  5. 團隊中的父級角色許可權

    將來在團隊支持上下級關係後,當前用戶沒有被分配到許可權,且當前團隊存在父級時將向上遞歸查找距離最近的預設角色來獲得許可權列表

用戶許可權類型

用戶的許可權類型大概分為四類

  • 菜單:是否可以通過菜單訪問某個頁面

  • 頁面元素:是否可以對頁面內的元素進行操作,如按鈕。頁面元素需要掛在菜單下

  • 數據:是否顯示指定欄位。數據需要掛在菜單下

    數據與頁面元素類似,但與頁面元素之間相互獨立

  • API:是否可以訪問指定API。API一般需要掛在菜單或頁面元素下,如有需要也可以掛在數據下

user-permission-type.png

許可權層級

permission-level.png

總結

至此,我們從一個用戶的角度將角色和許可權,前端與後端都串聯了起來。但到目前為止還是概念的梳理階段,做好一個許可權中心很難。每個團隊有自己的管理方式,如何在不同的團隊需求中摘取到共同點把主線串聯起來,既能滿足絕大部分場景需求又留有擴展餘地仍然需要時間去驗證。

(本文章不代表最終設計)

參考:

https://uxdesign.cc/design-permissions-for-a-saas-app-db6c1825f20e

開源地址

MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks

MASA.Contrib:https://github.com/masastack/MASA.Contrib

MASA.Utils:https://github.com/masastack/MASA.Utils

MASA.EShop:https://github.com/masalabs/MASA.EShop

MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor

如果你對我們的 MASA Framework 感興趣,無論是代碼貢獻、使用、提 Issue,歡迎聯繫我們

16373211753064.png


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有時候,我們將數據變換之後再繪圖,一方面,可以突出某些區域的數據;另一方面,變換之後可以更好的看出數據之間的關係。 matplotlib 提供了兩種變換數據的方式,一種是 Scale(縮放),一種是Projection(投影)。 Scale是對數據的一個維度進行變換,Projection則是對2個或 ...
  • 1、synchronized關鍵字簡介 synchronized是java中的一個關鍵字,在中文中為同步,也被稱之為'同步鎖',以此來達到多線程併發訪問時候的併發安全問題,可以用來修飾代碼塊、非靜態方法。靜態方法等; 修飾代碼塊時:給當前指定的對象加鎖 修飾非靜態方法時:作用於當前實例加鎖 修飾靜態 ...
  • 雙親委派機制:當某個類載入器準備載入一個.class位元組碼文件時,它首先將這個載入任務委派給上一級類載入器,上一級載入器再委派到更上一級類載入器,遞歸這個操作直到最頂級的類載入器。 一、類載入器的類別 在介紹Java的雙親委派機制的時候,不得不提ClassLoader(類載入器) 我們編譯的Java ...
  • 一、分散式鏈路追蹤發展簡介 1.1 分散式鏈路追蹤介紹 關於分散式鏈路追蹤的介紹,可以查看我前面的文章 微服務架構學習與思考(09):分散式鏈路追蹤系統-dapper論文學習(https://www.cnblogs.com/jiujuan/p/16097314.html) 。 這裡的 OpenTel ...
  • 條碼的應用已深入生活和工作的方方面面。在處理條碼時,常需要和各種文檔格式相結合。當需要在文檔中插入、編輯或者刪除條碼時,可藉助於一些專業的類庫工具來實現。本文,以操作PDF文件為例,介紹如何在編輯表格時,向單元格中添加條形碼。 【程式環境】 本次功能測試中,使用 Free Spire.PDF for ...
  • 1 Sentinel主頁 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 1.1 Sentinel介紹 隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分散式服務架構的流量控制組件,主要以流量為切 ...
  • 前言 dubbo是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。作為spring cloud alibaba體系中重要的一部分,隨著spring cloud alibaba在國內活躍起來,dubbo也越來越深受各大公司的青睞。本文就來對dubbo的spi機制源碼進行剖析,看 ...
  • ​ 問題描述 我在Eclipse上運行項目的時候,在我用fileUpload上傳圖片,等到下一次Tomcat刷新的時候,這個照片就沒了,而且點擊查看那個文件夾也查看不到有圖片文件。 原因 我後來在網上查詢相關資料發現是Eclipse整 合Tomcat的問題,因為他們整合之後,你用相對路徑上傳的圖片會 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...