微服務與Nacos概述-6

RBAC 模型

RBAC 基于角色的訪問控制是實施面向企業安全策略的一種有效的訪問控制方式。

基本思想是,對系統操作的各種權限不是直接授予具體的用戶,而是在用戶集合與權限集合之間建立一個角色集合。每一種角色對應一組相應的權限。一旦用戶被分配了適當的角色后,該用戶就擁有此角色的所有操作權限。這樣做的好處是,不必在每次創建用戶時都進行分配權限的操作,只要分配用戶相應的角色即可,而且角色的權限變更比用戶的權限變更要少得多,這樣將簡化用戶的權限管理,減少系統的開銷。

在這里插入圖片描述

權限可分為三類:數據權限、操作權限和頁面權限。

1、數據權限:控制賬號可看到的數據范圍。例如負責不同區域的人員,只能看到自己負責區域的標的,不能看到和修改其他區域的。

2、頁面權限:控制賬號可以看到的頁面,通常系統都會有這一層權限控制。這種控制相對操作權限來說比較粗放,難以對權限進行精細管理。

3、操作權限:控制賬號在頁面上可以操作的按鈕,通常指的是頁面中的新增、刪除、編輯、查詢功能。沒有操作權限,就只能看到頁面中的數據,但是不能對數據進行操作。操作權限是比頁面權限更精細一層的權限控制。

基礎概念

RBAC 模型根據設計需要可分為 RBAC0、RBAC1、RBAC2、RBAC3 四種類型。其中 RBAC0 是基礎,另外三種是 RBAC0 的升級。產品經理在進行權限系統設計時,可以結合實際情況來選擇使用的 RBAC 模型的類型。

RBAC0 是 RBAC 模型的核心基礎思想,即用戶通過被賦予角色和權限進行關聯。用戶、角色和權限之間的兩兩關系均是多對多關系,即一個用戶可以被賦予多個角色,一個角色可以被賦予多個用戶。一個角色可以擁有多項權限,一項權限可以賦予多個角色。

RBAC1 是引入繼承關系的 RBAC 模型,一個角色可以從另一個角色繼承許可權,即角色具有上下級的關系。角色間的繼承關系可分為一般繼承關系和受限繼承關系。一般繼承關系允許角色間的多繼承,受限繼承關系則進一步要求角色繼承關系是一個樹結構

RBAC-2 模型在用戶與角色間和角色與角色之間加入了一些規則限制。互斥角色是指各自權限可以互相制約的兩個角色。且不能同時獲得兩個角色的使用權。規定了權限被賦予角色時或角色被賦予用戶時所應遵循的強制性規則。角色互斥、基數約束、先決條件角色等

互斥角色:同一用戶在兩個互斥角色中只能選擇一個。例如不能同時被指派給會計角色和審計員角色

先決條件角色 :指要想獲得較高的權限要首先擁有低一級的權限。例如要想為用戶分配角色 A,則必須先分配角色 B

基數約束:一個角色被分配的用戶數量受限;一個用戶可擁有的角色數目受限

運行時互斥:允許一個用戶具有兩個角色,但在運行中不可同時激活這兩個角色。

RBAC3 統一模型:同時包含 RBAC1 和 RBAC2 的特性,既有角色層級劃分,也有各種限制

表定義

在這里插入圖片描述

系統的 RBAC 相關表的定義

create table if not exists tbl_users(id bigint primary key,foreign key(id) references tbl_account on delect cascade,username varchar(32) not null unique,password varchar(32) not null,salt varchar(32) comment '鹽值',iter int default 6 comment '加密次數'
)engine = innodb default charset utf8 comment '登錄賬戶信息';create table if not exists tbl_roles(id bigint primary key auto_increment comment '代理主鍵',name varchar(32) not null,descn varchar(255) comment '備注說明,一般在具體表中會創建一些看起來似乎沒有什么用的列' 
)egine = innodb default charset utf8 comment '角色信息';

一般在管理系統中,針對普通用戶的權限管理是通過菜單項是否顯示來實現的,當然服務器端會針對用戶的請求進行權限驗證

在這里插入圖片描述

無限級分類的實現方法為 自關聯表

create table if not exists tbl_permissions(id bigint primary key auto_increment,parent_id bigint,foreign key(parent_id) references tbl_persimissions(id) on delete cascade
) engine = innodb default charset utf8;

一般為了簡化編碼,還會引入一些額外列定義,例如 level 層級、是否具有孩子節點、孩子節點個數等

create table if not exists tbl_permissions(id bigint primary key auto_increment,parent_id bigint,foreign key(parent_id) references tbl_persimissions(id) on delete cascade,title varchar(32) not null comment'菜單項名稱',url varchar(64) comment '對應的URL地址',descn comment '特別重要的列,用于表示訪問當前菜單所需要的權限字符串,例如user:query:1',is_child boolean default  comment '額外列,用于表示是否葉子節點,還經常添加一些其它的列'
)engine=innodb default charset utf8;create table if not exists tbl_role2permission(role_id bigint not null,permission_id bigint not null,primary key(permission_id,role_id),foreign key(permission_id) references tbl_permissions on delete cascade,foreign key(role_id) references tbl_roles on delete cascade
)engine=innodb default charset utf8;

補充:

1、具體權限是否對應到菜單取決于控制等級,如果需要控制到按鈕級,則菜單和權限之間多對多關聯

2、考慮具體的業務規則,是否有臨時授予用戶某些權限的可能,如果有則還需要在用戶表和權限表之間建立多對多關聯

3、是否有用戶組

JSON 響應結果

Json 響應枚舉類型

public enum ResponseEnum { //列舉出本系統業務上的所有的可能情況SUCCESS(200, "成功" ), ERROR(500, "發生未知錯誤,請聯系管理員" )USERNAME_OR_PASSWORD_INVALIDATE(301, "用戶名或者密碼錯誤" ), HAVE_NO_RIGHTS(302, "該角色還沒有被賦權,請聯系管理員" ), NO_LOGIN(303, "還沒有登錄" ), LOGIN_SUCCESS(304, "登錄成功" ),TOKEN_INVALID(305, "token 無效,請先登錄" ), TOKEN_EXPIRE(306, "token 已經超時,請重新登錄" ), USER_STATUS_ERROR(307, "用戶已封禁" ), private int code;private String message;
}
public class JsonResult {private int code;private Boolean success;private String message;private Object data;public JsonResult(ResponseEnum responseEnum, Object data ) {this.code = responseEnum.getCode( );this.message = responseEnum.getMessage( );this.data = data;}
}

補充說明

1、用戶組設置。一般來說權限管理系統不需要設置用戶組,只要當用戶基數較大,角色類型過多時,為了便于管理員進行操作,才會引入用戶組的概念。用戶組可以理解為,將某個部門的所有人看成一個用戶組,再給用戶組賦予角色,這個部門的所有人就都有了用戶組中角色的權限。對于給群體賬號賦予權限,用戶組可以提供很大的便利。同時用戶組中的賬號,除擁有用戶組的權限外,還可以擁有指定的角色。

賬號管理

賬號管理模塊是對系統用戶的信息進行管理,在列表中要展示重要性較高的字段,便于識別賬號。如編號、真實姓名、用戶名、部門、角色、創建時間、賬號狀態等。需要能通過真實姓名和用戶名來查詢賬號,便于管理員定位到想要操作的賬號。除此之外,還需要有新建賬號功能
在這里插入圖片描述

新建賬號功能可跳轉頁面或彈窗展示,頁面信息除賬號基本信息外,還需要對賬號賦予角色
在這里插入圖片描述

除了需要創建新賬號外,還需要對已有的賬號進行修改,賬號用戶的真實姓名和用戶名不可修改,其他信息可修改
在這里插入圖片描述

角色管理

角色即為擁有共同特征的同一類人群身份的歸納,所以在角色管理頁面中,需要設置能夠識別角色特征的字段。如角色名稱、角色描述、創建時間、更新時間、狀態等。角色數量通常不會太多,數量較少時可取消查詢功能,但新建角色功能是必不可少的。
在這里插入圖片描述

新建角色即是對角色進行描述并賦予權限的過程,若權限數量不多,可采用下拉列表的方式選擇。若權限數量多且分類繁雜,則可采用分組列表的方式展示,讓用戶通過復選框勾選。為了操作簡便,建議增加全選/反選功能。

在這里插入圖片描述

操作欄中的編輯功能,對已有角色進行修改,角色的名稱、描述、狀態、權限均可修改,每次修改后在列表中記錄更新時間

在這里插入圖片描述

對應賬號指的是配置過該角色的賬號,點擊后在新頁面中打開,展示賬號信息,包括賬號的真實姓名、用戶名、部門、創建時間、賬號狀態,并可在列表中對賬號進行編輯。

在這里插入圖片描述

權限管理

若系統中權限數量較多且權限類型復雜(頁面權限、操作權限、數據權限),為了保證管理員使用便捷及減低出錯概率,可以將權限管理頁面以列表的形式展示,展示頁面包含權限編號、名稱、類型、描述、創建時間等。若系統權限較為簡單,則可用樹狀圖來展示權限,不需要對權限做過多描述。

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

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

相關文章

【MySQL】MySQL基礎知識詳解(一)

MySQL select列的別名去除重復行空值參與運算著重號查詢常數顯示表結構過濾數據 排序使用 ORDER BY 對查詢到的數據進行排序操作。使用列的別名,進行排序二級排序 分頁LIMIT 分頁顯示公式:(當前頁數減一)*每頁條數,每頁…

【AIGC】 快速體驗Stable Diffusion

快速體驗Stable Diffusion 引言一、安裝二、簡單使用2.1 一句話文生圖2.2 詳細文生圖 三、進階使用 引言 stable Diffusion是一款高性能的AI繪畫生成工具,相比之前的AI繪畫工具,它生成的圖像質量更高、運行速度更快,是AI圖像生成領域的里程碑…

【100天精通python】Day41:python網絡爬蟲開發_爬蟲基礎入門

目錄 專欄導讀 1網絡爬蟲概述 1.1 工作原理 1.2 應用場景 1.3 爬蟲策略 1.4 爬蟲的挑戰 2 網絡爬蟲開發 2.1 通用的網絡爬蟲基本流程 2.2 網絡爬蟲的常用技術 2.3 網絡爬蟲常用的第三方庫 3 簡單爬蟲示例 專欄導讀 專欄訂閱地址:https://blog.csdn.net/…

【玩轉Linux操作】crond的基本操作

🎊專欄【玩轉Linux操作】 🍔喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。 🎆音樂分享【Counting Stars 】 歡迎并且感謝大家指出小吉的問題🥰 文章目錄 🍔概述🍔命令?常用選項 🍔練…

軟件-常用軟件系統架構

目錄 1.客戶端-服務器架構 2.分布式架構 3.微服務架構 4.事件驅動架構 5.單體架構 6.混合架構 當我們談論系統架構時,可以將其比喻為一座房子的設計和結構,想象一下你計劃建造一座豪華別墅,你需要考慮各種因素:如房子的大小…

linux下常見編譯問題

linux下常見編譯問題 linux-cmake靜態編譯查看系統支持的的libc版本查看程序需要的動態鏈接庫查看程序需要的libc版本freebsd下 linux-cmake靜態編譯 CMakeLists.txt 添加 set(CMAKE_EXE_LINKER_FLAGS "-static")ELF 64-bit LSB executable, AMD x86-64, version 1…

【微服務】一文了解 Nacos

一文了解 Nacos Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石項目(完成微服務拆分和業務中臺建設),成長于十年雙十一的洪峰考驗,沉淀了簡單易用、穩定可靠、性能卓越的核心競爭力。 隨著云計算興起, 2018 2018 20…

編程練習(3)

一.選擇題 第一題: 函數傳參的兩個變量都是傳的地址,而數組名c本身就是地址,int型變量b需要使用&符號,因此答案為A 第二題: 本題考察const修飾指針變量,答案為A,B,C,D 第三題: 注意int 型變…

13---內嵌HTML和React

雖然Markdown本身不支持內嵌HTML和React&#xff0c;但可以在Markdown文檔中直接插入HTML代碼和React組件。 一、在markdown中內嵌HTML 在Markdown中&#xff0c;你可以使用HTML標簽來實現更復雜的樣式和布局。例如&#xff0c;你可以使用<div>標簽來創建一個容器&#…

算法與數據結構(五)--樹與二叉查找樹

符號表的增刪查操作&#xff0c;隨著元素個數N的增多&#xff0c;其耗時也是線性增多的&#xff0c;時間復雜度都是O(n)&#xff0c;為了提高運算效率&#xff0c;我們學習樹這種數據結構。 目錄 一.樹的基本定義 二.樹的相關術語 三.二叉樹的基本定義 四.二叉樹的鏈表實現…

leetcode 279. 完全平方數

2023.8.18 與零錢兌換相似&#xff0c;本題屬于完全背包問題&#xff1a;完全平方數為物品&#xff0c;整數n為背包。 直接上代碼&#xff1a; class Solution { public:int numSquares(int n) {vector<int> dp(n1 , INT_MAX);dp[0] 0;for(int i1; i*i<n; i){for(in…

時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測

時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測 目錄 時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 時序預測 | MATLAB實現WOA-CNN-BiGRU鯨…

干翻Dubbo系列第十二篇:Dubbo協議介紹

文章目錄 文章說明 一&#xff1a;Dubbo協議 1&#xff1a;Dubbo協議簡介 2&#xff1a;Dubbo協議優點 3&#xff1a;Dubbo協議幀的組成 (一)&#xff1a;幻數 (二)&#xff1a;2Way (三)&#xff1a;event (四)&#xff1a;Serilization ID (五)&#xff1a;status …

每日一題 142環形鏈表||(快慢指針)

題目 給定一個鏈表的頭節點 head &#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評測系統內部…

深入理解【二叉樹】

&#x1f4d9;作者簡介&#xff1a; 清水加冰&#xff0c;目前大二在讀&#xff0c;正在學習C/C、Python、操作系統、數據庫等。 &#x1f4d8;相關專欄&#xff1a;C語言初階、C語言進階、C語言刷題訓練營、數據結構刷題訓練營、有感興趣的可以看一看。 歡迎點贊 &#x1f44d…

Java中的異常

認識異常 異常就是程序出現的問題&#xff1b; Integer.valueOf("aaaa"); 異常體系 因為寫代碼時經常會出現問題&#xff0c;Java的設計者們早就為我們寫好了很多個異常類&#xff0c;來描述不同場景下的問題。而有些類是有共性的所以就有了異常的繼承體系 Error&…

日志采集分析ELK

這里的 ELK其實對應三種不同組件 1.ElasticSearch&#xff1a;基于Java&#xff0c;一個開源的分布式搜索引擎。 2.LogStash&#xff1a;基于Java&#xff0c;開源的用于收集&#xff0c;分析和存儲日志的工具。&#xff08;它和Beats有重疊的功能&#xff0c;Beats出現之后&a…

OLED透明屏采購指南:如何選擇高質量產品?

著科技的不斷進步&#xff0c;OLED透明屏作為一種創新的顯示技術&#xff0c;在各個行業中得到了廣泛應用。 在進行OLED透明屏采購時&#xff0c;選擇高質量的產品至關重要。在這篇文章中&#xff0c;尼伽將為您提供一個全面的OLED透明屏采購指南&#xff0c;幫助您了解關鍵步…

day20 飛機大戰射擊游戲

有飛行物類 飛行 爆炸 的連環畫&#xff0c; 飛行的背景圖 &#xff0c; 子彈圖&#xff0c; 還有游戲開始 暫停 結束 的畫面圖。 設計一個飛機大戰的小游戲&#xff0c; 玩家用鼠標操作hero飛行機&#xff0c; 射出子彈殺死敵機&#xff0c;小蜜蜂。 敵機可以獲得分數&…

Jmeter參數化類型

1.參數在多個請求報文中出現&#xff0c;執行一次需要使用同一個參數--隨機生成(隨機變更) 2.參數在請求報文中出現&#xff0c;執行過程需要使用同一個參數(--固定參數) 3.參數從指定幾個固定中隨機獲取一個 4.參數從本地文件中獲取 5.參數在多個請求報文中出現&#xff0c;每…