MASA Auth - 許可權設計

来源:https://www.cnblogs.com/MASA/archive/2022/05/24/16304403.html
-Advertisement-
Play Games

許可權術語 Subject:用戶,用戶組 Action:對Object的操作,如增刪改查等 Object:許可權作用的對象,也可以理解為資源 Effect:規則的作用,如允許,拒絕 Condition:生效條件 Permission:允許(拒絕)用戶(用戶組)在條件允許下對對象(資源)的動作 Role: ...


許可權術語

  • Subject:用戶,用戶組

  • Action:對Object的操作,如增刪改查等

  • Object:許可權作用的對象,也可以理解為資源

  • Effect:規則的作用,如允許,拒絕

  • Condition:生效條件

  • Permission:允許(拒絕)用戶(用戶組)在條件允許下對對象(資源)的動作

  • Role:許可權集合,許可權數量>=1

RBAC

RBAC (Role-Based Access Control,基於角色的訪問控制),引入了 Role(角色)的概念,並且將許可權與角色進行關聯。用戶通過扮演某種角色,具有該角色的所有許可權。

即許可權,角色,用戶之間的關係是多對多對多

RBAC0

  • 用戶
  • 角色
  • 許可權
  • 會話

用戶和角色的關係是多對多

許可權和角色的關係是多對多

RBAC1

  • 角色繼承
  • 許可權擴展

RBAC2

  • 互斥約束

    用戶,角色,許可權均可互斥。不允許存在任意衝突。

  • 基數約束

    角色分配次數受限,比如一個公司只有一個CEO

  • 先決條件角色

    許可權賦予要從低到高。如:要先有XX副總許可權才能獲取XX總許可權。

  • 靜態職責分離(目前先支持靜態職責分離)

    用戶無法被賦予衝突的角色

  • 動態職責分離

    用戶會話中無法激活衝突的角色

RBAC3

RBAC0 + RBAC1 + RBAC2

ABAC

Attribute Based Access Control,基於屬性的許可權驗證。允許更細粒度的控制X屬性的Y資源在Z條件下進行A操作。相較於RBAC,會對開發人員提出更高的要求,目前我們先只介紹到RBAC。

舉個例子

我們通過預設博客文章場景來反推實現方式

用戶角色

一篇文章要面對兩種角色,即:讀者,管理員

[{
    "Subject": "Avril",
    "Roles":["ArticleReader"]
}, {
    "Subject": "Dodd",
    "Roles":["ArticleManager"]
}]

角色

讀者將獲得讀文章許可權,管理員則獲得管理文章許可權

[
    {
        "Name": "ArticleReader",
        "Permissions": [
            "ReadArticle"
        ]
    }, {
        "Name": "ArticleManager",
        "Permissions": [
            "ManageArticle"
        ]
    }
]

許可權

角色有了,依賴的許可權也有了,接下來我們需要繼續把許可權明細確認一下

[
    {
        "Name": "ReadArticle",
        "Effect": "Allow",
        "Action": ["Read"],
        "Object": ["Article"]
    }, {
        "Name": "ManageArticle",
        "Effect": "Allow",
        "Action": ["Create", "Read", "Update", "Delete"],
        "Object": ["Article"]
    }
]

依賴模型

基於RBAC3的依賴模型

erd.png

用戶管理

簡單的引入一個RBAC無法滿足一個工程化的項目,比如批量操作,前後端集成等

團隊

單個用戶的管理已經出來了,但日常中我們很少會對單個用戶進行授權。更多的是針對一組(批)人進行操作。

team.png

前端集成

到目前為止,我們設計的都還在後端。而前端關心的是頁面展示相關的,比如菜單,頁面元素等

等一下!

這裡要設計什麼?或許可以偷個懶,在Objects里增加一個ObjectType用來區分菜單還是頁面元素即可?

ObjectType被修改的可能性很小,所以我們將在SDK中提供枚舉來支持

總結

至此,我們把RBAC與用戶管理的部分已經設計完了。或許它缺少了傳統意義上的組織架構樹,但它帶來了更加鬆散的,扁平化的團隊管理。

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

開源地址

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
更多相關文章
  • 使用FFmpeg庫做的項目,調試項目的時候發現,連續解視頻進行播放,會有明顯記憶體增加問題。連續工作10個小時後就會 被linux 內核kill掉。 通過逐步註掉代碼和網上查閱資料。最後發現記憶體泄漏有一些幾個地方: 一、av_read_frame的問題 從網上查閱大神們的經驗,主要是av_read_f ...
  • 在Java 9中又新增了一些API來幫助便捷的創建不可變集合,以減少代碼複雜度。 本期配套視頻:Java 9 新特性:快速定義不可變集合 常規寫法 以往我們創建一些不可變集合的時候,通常是這樣寫的: // 不可變的Set Set<String> set = new HashSet<>(); set. ...
  • 反向代理(2022/03/31) 簡單記錄 Nginx 反向代理相關的一些配置文件,描述不足之處請自行查閱相關資料。 1. HTTP 配置 upstream web { server domain.com:80; } server { # 監聽 tcp4 listen 80; # 監聽 tcp6 l ...
  • 爬蟲代理 IP 池及隧道代理 日常開發中,偶爾會遇到爬取網頁數據的需求,為了隱藏本機真實 IP,常常會用到代理 IP 池,本文將基於 openresty 與代理 IP 池搭建更為易用的隧道代理。 1. 代理 IP 池 1.1 簡介 代理 IP 池即在資料庫中維護一個可用的 IP 代理隊列,一般實現思 ...
  • 來源:www.cnblogs.com/keyyang/p/4128424.html 我們可能經常會用到 Thread.Sleep 函數來使線程掛起一段時間。那麼你有沒有正確的理解這個函數的用法呢?思考下麵這兩個問題: 假設現在是 2008-4-7 12:00:00.000,如果我調用一下 Threa ...
  • 1.Docker基本介紹? Docker就是虛擬化的一種輕量級替代技術,基於Go語言的開源應用容器引擎。Docker的容器技術不依賴任何語言、框架或系統,可以將應用程式變成一種標準化的、可移植的、自管理的組件,並脫離伺服器硬體在任何主流系統中開發、調試和運行。 光看這個介紹還不足以知道Docker是 ...
  • 在基於SqlSugar的開發框架中,我們設計了一些系統服務層的基類,在基類中會有很多涉及到相關的數據處理操作的,如果需要跟蹤具體是那個用戶進行操作的,那麼就需要獲得當前用戶的身份信息,包括在Web API的控制器中也是一樣,需要獲得對應的用戶身份信息,才能進行相關的身份鑒別和處理操作。本篇隨筆介紹基... ...
  • 在前面隨筆,我們介紹過這個基於SqlSugar的開發框架,我們區分Interface、Modal、Service三個目錄來放置不同的內容,其中Modal是SqlSugar的映射實體,Interface是定義訪問介面,Service是提供具體的數據操作實現。在Service層中,往往除了本身的一些增刪... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...