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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...