從零開始搭建企業管理系統(六):RBAC 權限管理設計

RBAC 權限管理設計

    • 前言
    • 權限分類
    • 功能權限設計
      • 什么是 RBAC
      • RBAC 組成
      • RBAC 模型分類
        • 基本模型RBAC0
        • 角色分層模型RBAC1
        • 角色限制模型RBAC2
        • 統一模型RBAC3
      • RBAC0 權限設計
        • 用戶管理
        • 角色管理
        • 權限管理
        • 關聯表
    • 總結

前言

作為一個后臺管理系統,權限管理是一個繞不開的話題,一個成熟的后端系統離不開一個比較完善的權限管理系統,所以本小結我們根據 RBAC 思想來設計一下我們這個系統的權限管理。

權限分類

一般來說,我們常說的權限分為兩種,一種是功能權限,一種則是數據權限。

  • 功能權限指的是用戶登錄系統后能看到什么模塊,能看到哪些頁面。
  • 數據權限指的是用戶在某個模塊里面能夠看到哪些數據。

在這里插入圖片描述

本系統目前只進行功能權限的設計,數據權限默認進行管控,先最小化功能實現,后面有需求在迭代吧。

功能權限設計

目前業界有很多關于權限系統的技術模型,常見的有ACL、ABAC、DAC、RBAC等等,不同體量的權限系統,我們可以參考不同的權限模型進行梳理和設計,本系統就采用一個經典的 RBAC 權限系統模型,我接觸的系統基本上都是使用的 RBAC 模型,能滿足絕大部分的需求。

什么是 RBAC

RBAC 模型(Role-Based Access Control:基于角色的訪問控制)模型是比較早期提出的權限實現模型,在多用戶計算機時期該思想即被提出,其中以美國George Mason大學信息安全技術實驗室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公認。

RBAC 認為權限授權的過程可以抽象地概括為:Who 是否可以對What進行How的訪問操作,并對這個邏輯表達式進行判斷是否為True的求解過程,也即是將權限問題轉換為Who、What、How的問題,Who、What、How構成了訪問權限三元組,具體的理論可以參考RBAC96。

RBAC的權限授權其實就是Who、What、How的問題。

  • Who:權限的擁用者
  • What:權限針對的資源
  • How:具體的權限

RBAC 組成

RBAC模型的三要素為:用戶、角色、權限。

  • 用戶:是發起操作的主體,例如:后臺管理系統的用戶、OA系統的內部員工、面向C端的用戶。
  • 角色:用于連接了用戶和權限的橋梁,每個角色可以關聯多個權限,同時一個用戶也可以關聯多個角色,那么這個用戶就有了多個角色的多個權限。
  • 權限:用戶可以訪問的資源,包括:頁面權限、操作權限、數據權限。

RBAC 模型分類

本系統使用 RBAC0 作為權限設計的方案,夠用以及容易學習。

在RBAC中,根據權限設計的復雜程度,可分為RBAC0、RBAC1、RBAC2、RBAC3,我們就重點了解一下我們需要使用到的 RBAC0 模型就行,另外幾種有興趣可以百度一下。

基本模型RBAC0

RBAC0是基礎,很多產品只需基于RBAC0就可以搭建權限模型了。在這個模型中,我們把權限賦予角色,再把角色賦予用戶。用戶和角色,角色和權限都是多對多的關系。用戶擁有的權限等于他所有的角色持有權限之和。

在這里插入圖片描述

角色分層模型RBAC1

RBAC1建立在RBAC0基礎之上,在角色中引入了繼承的概念。簡單理解就是,給角色可以分成幾個等級,每個等級權限不同,從而實現更細粒度的權限管理。

角色限制模型RBAC2

RBAC2同樣建立在RBAC0基礎之上,僅是對用戶、角色和權限三者之間增加了一些限制。這些限制可以分成兩類,即靜態職責分離SSD(Static Separation of Duty)和動態職責分離DSD(Dynamic Separation of Duty)。

統一模型RBAC3

RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分層,也包括可以增加各種限制。

RBAC0 權限設計

通過上述分析,我們可以發現,設計功能權限離不開最基本的三要素:用戶管理、角色管理以及權限管理;根據業務的不同,可能還會涉及更復雜的三要素:部門管理、職位管理、菜單管理等,當然我們使用 RBAC0 只涉及到用簡單的3要素。

在這里插入圖片描述

用戶管理

為了便于大家理解,我們先參考一個優秀的開源框架 EL-ADMIN,給大家截點圖理解理解。

在這里插入圖片描述

可以很清楚的看到頁面上的功能,我們的頁面完成之后應該都是差不多的,并且還有一個部門管理,我們也可以有部門管理,但是不加入權限繼承。

用戶表設計:

字段類型含義
idbigint主鍵ID
usernamevarchar用戶名
mobilechar手機號
avatarvarchar頭像
emailvarchar郵箱
passwordvarchar密碼
statusint狀態 1正常 2鎖定
is_deletedatetime是否刪除
last_login_timedatetime最后登錄時間
create_timedatetime創建時間
create_uservarchar創建用戶
update_timedatetime更新時間
update_uservarchar更新用戶
角色管理

在這里插入圖片描述

上面說了我們的系統暫時是沒有數據權限的實現的。

角色表設計:

字段類型含義
idbigint主鍵ID
namevarchar角色名稱
remarkvarchar備注
statusint狀態 1正常 2鎖定
is_deletedatetime是否刪除
create_timedatetime創建時間
create_uservarchar創建用戶
update_timedatetime更新時間
update_uservarchar更新用戶
權限管理

在這里插入圖片描述

權限表設計:

字段類型含義
idbigint主鍵ID
pidbigint父菜單ID,一級菜單為0
namevarchar菜單名稱
urlvarchar菜單URL
permsvarchar授權(多個用逗號分隔,如:user:list,user:create)
typeint類型 0:目錄 1:菜單 2:按鈕
iconvarchar菜單圖標
orderint排序
statusint狀態
is_deletedatetime是否刪除
create_timedatetime創建時間
create_uservarchar創建用戶
update_timedatetime更新時間
update_uservarchar更新用戶
關聯表

還有兩張關聯表需要設計,這兩張表非常的簡單,只有兩個字段,分別是兩個關聯表的id,并且這兩個字段都需要設置外鍵。

用戶角色關聯表

字段類型含義
user_idbigint用戶ID(需要設置外鍵)
role_idbigint角色ID(需要設置外鍵)

角色權限關聯表

字段類型含義
role_idbigint角色ID(需要設置外鍵)
menu_idbigint權限ID(需要設置外鍵)

ok,關于表的設計到這里就結束了,先簡單的定了一個基礎版本,后續根據開發需求慢慢的在維護修改吧。

總結

關于權限設計這一塊,我們采用了 RBAC0 模型來實現,基本上中小型企業都是夠用的了。而且簡單易上手,學習難度不大,非常適合我們學習,下一小節我們使用 Spring Security 來編寫具體的代碼實現登錄和授權功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻剪輯:視頻創意制作,背景圖片融合視頻制作畫中畫效果

隨著社交媒體的興起,視頻制作不再僅僅是專業人士的專利。每個人都可以通過一些技巧,創作出獨特而富有吸引力的視頻內容。視頻剪輯是一種非常重要的技術,它能讓視頻從平淡無奇變為生動有趣。背景圖片融合視頻制作畫中畫效果,也能增…

vm的centos本地配置yum

vm的centos本地配置yum 關于上篇文章vmware安裝centos7總結 出現關于配置yum源wget找不到命令,但是沒安裝yum就沒法下載wget,也就沒法使用wget 所以我們本地配置yum源,不用wget那個命令了 📕步驟: cd /etc/yum.repo…

springboot利用easyexcel在瀏覽器中下載excel

前言 項目中操作excel是一種很常用的功能,比如下載一份excel的報價單。這篇文章會介紹一款excel的處理工具以及導出遇到的三個常見異常(重要)。 之前遇到一個這樣的需求:后臺管理頁面,點擊下載按鈕,下載一份excel格式的報價清單…

《人工智能導論》知識思維導圖梳理【1~5章節】

文章目錄 說明第一章 緒論人工只能概述 第二章 知識表示和知識圖譜一階謂詞邏輯和知識表示法產生式表示和框架表示法 第三章 確定性推理方法推理的基本概念自然演繹推理歸結演繹推理謂詞公式化子句集魯賓孫歸結原理歸結反演歸結反演求解問題 第四章 不確定性推理方法似然推理可…

npm run build時提示vue/types/jsx.d.ts中的錯誤

解決方法一: 可能是因為vue版本過高引起的 我直接將package.json中vue以及vue-template-compiler的版本的前面^去掉,安裝指定的版本 注意:vue和vue-template-compiler需要版本一致 參考鏈接:鏈接 解決方法二: 如果如…

線上問題得解決

問題: 最近碰到一個比較棘手但是比較低級的問題,一直沒有找到原因,苦找了兩天才發現問題。場景就是訂單做了某一個操作之后(比如揀貨完成)然后到下一步(下道口)。 但是線上幾萬筆訂單 &#xf…

QT使用SQLite 超詳細(增刪改查、包括對大量數據快速存儲和更新)

QTSQLite 在QT中使用sqlite數據庫,有多種使用方法,在這里我只提供幾種簡單,代碼簡短的方法,包括一些特殊字符處理。在這里也給大家說明一下,如果你每次要存儲的數據量很大,建議使用事務(代碼中…

canvas 有趣的彈簧效果

先上效果 兩個小球之間有一根彈簧,這里有一條線表示,其中左球固定,在點擊開始后,右球開始做自由落體 思路 先做受力分析 經過受力分析可以發現,整個系統一共有三個力在起作用,我們分別把他們求出來并合成…

控制臺打印如來佛圖像

代碼 System.out.println(" _ooOoo_ \n"" o8888888o \n"" 88 \".\" 88 …

python——第十七天

方法重寫(overwrite) 、方法覆蓋(override ):在繼承的基礎上,子類繼承了父類的方法,如果不能滿足自己使用,我們就可以重寫或覆蓋該方法 函數重載(overload): 在強數據類型的編程語言中(如Java、C、C等等): 函數名稱…

轉換 pytorch 格式模型為 caffe格式模型 pth2caffemodel

基于 GitHub xxradon/PytorchToCaffe 源碼,修改 example\resnet_pytorch_2_caffe.py 如下 import os import sys sys.path.insert(0, .)import torch from torch.autograd import Variable from torchvision.models import resnet import pytorch_to_caffe"&q…

PDI/Kettle-9.4.0.0-343源碼下載及編譯

目錄 🍑一、概要🍊最新版本10.x(2023-11-30) 🍑二、下載🍑三、編譯🍊3.1、導入開發工具🍊3.2、開始編譯🍊3.3、編譯報錯🍊3.4、報錯原因:jdk版本低…

centos7安全防護_CPU占用率超過百分之300_centos7.4中毒CPU百分之百_清理毒源---Linux工作筆記068

執行top命令的時候看到有個進程: sshd占用cpu百分之300多...而且就算是kill -9 殺掉進程以后,進程又會自動啟動 ll /proc/7298 我們執行這個命令,可以看到有個/var/tmp/sshd的文件 我們進入cd /var/tmp 然后我們執行 rm -rf sshd刪除這個文件,然后我們再去top可以看到 cpu就…

【數倉理論】

一、數倉建模方法論 1.1 ER模型(Entity Relationship、實體關系模型、范式模型) ER模型是Bill Inmon提出的一種建模方法,實體關系模型將復雜的數據抽象為兩個概念 ---- 實體和關系 該模型在范式理論上符合3NF,這種模型目的是減少…

測距傳感器

測距傳感器 電子元器件百科 文章目錄 測距傳感器前言一、測距傳感器是什么二、測距傳感器的類別三、測距傳感器的應用實例四、測距傳感器的作用原理總結前言 測距傳感器廣泛應用于自動化控制、機器人導航、無人駕駛、測量儀器等領域。不同類型的測距傳感器具有不同的測距范圍、…

xtu oj 1178 Rectangle

題目描述 給你兩個平行于坐標軸的矩形,請判斷兩者是不是相交(面積有重合的部分)? 輸入 第一行是一個整數K,表示樣例數。 每個樣例占兩行,每行是4個整數,表示一個矩形的對角線點的坐標&#x…

重磅!2023中國高校計算機大賽-人工智能創意賽結果出爐

目錄 中國計算機大賽-人工智能創意賽現場C4-AI大賽頒獎及留影800個AI應用?這屆大學生真能“搞事情”AI原生時代,百度要再培養500萬大模型人才 中國計算機大賽-人工智能創意賽現場 12月8日,杭州,一位“白發老人”突然摔倒在地&…

[基礎IO]文件描述符{C庫函數\系統接口\初識fd}

文章目錄 1.基礎知識1.1對文件的認識1.2對系統調用接口的認識1.3如何理解LInux下一切皆文件? 2.C語言的庫函數2.1FILE *fopen(const char *path, const char *mode);2.2對fopen()的mode的w/a的深層認識2.3fclose()2.4size_t fwrite(const void *ptr, size_t size, size_t nmem…

測試經理主管面試題

測試專業技能 請談談您對軟件測試生命周期(STLC)的理解 需求分析:在這個階段,測試團隊仔細分析項目需求,理解產品功能和非功能需求。這有助于確定測試的范圍和目標,為后續階段奠定基礎。測試計劃&#xf…

【桌面應用開發】Tauri是什么?基于Rust的桌面應用

自我介紹 做一個簡單介紹,酒架年近48 ,有20多年IT工作經歷,目前在一家500強做企業架構.因為工作需要,另外也因為興趣涉獵比較廣,為了自己學習建立了三個博客,分別是【全球IT瞭望】,【…