設計一個完美的用戶角色權限表

設計一個完美的用戶角色權限表需要考慮系統的安全性、靈活性和可擴展性。以下是一個詳細的用戶角色權限管理表設計方案,包含多個表結構和字段描述。

目錄

      • 1. 用戶表(Users Table)
      • 2. 角色表(Roles Table)
      • 3. 權限表(Permissions Table)
      • 4. 角色權限表(Role Permissions Table)
      • 5. 用戶角色表(User Roles Table)
      • 6. 用戶權限表(User Permissions Table)
      • 數據插入示例
        • 插入角色
        • 插入權限
        • 分配角色權限
        • 分配用戶角色
        • 分配用戶權限
      • 查詢示例
        • 查詢用戶的所有權限
      • 索引和優化

1. 用戶表(Users Table)

存儲用戶的基本信息。

CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

2. 角色表(Roles Table)

存儲系統中定義的角色。

CREATE TABLE roles (role_id INT AUTO_INCREMENT PRIMARY KEY,role_name VARCHAR(50) NOT NULL UNIQUE,description VARCHAR(255),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

3. 權限表(Permissions Table)

存儲系統中定義的權限。

CREATE TABLE permissions (permission_id INT AUTO_INCREMENT PRIMARY KEY,permission_name VARCHAR(50) NOT NULL UNIQUE,description VARCHAR(255),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

4. 角色權限表(Role Permissions Table)

定義每個角色所擁有的權限。

CREATE TABLE role_permissions (role_permission_id INT AUTO_INCREMENT PRIMARY KEY,role_id INT NOT NULL,permission_id INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (role_id) REFERENCES roles(role_id),FOREIGN KEY (permission_id) REFERENCES permissions(permission_id),UNIQUE (role_id, permission_id)
);

5. 用戶角色表(User Roles Table)

定義每個用戶所分配的角色。

CREATE TABLE user_roles (user_role_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,role_id INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users(user_id),FOREIGN KEY (role_id) REFERENCES roles(role_id),UNIQUE (user_id, role_id)
);

6. 用戶權限表(User Permissions Table)

直接賦予用戶特定權限,可以覆蓋角色權限。

CREATE TABLE user_permissions (user_permission_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,permission_id INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users(user_id),FOREIGN KEY (permission_id) REFERENCES permissions(permission_id),UNIQUE (user_id, permission_id)
);

數據插入示例

插入角色
INSERT INTO roles (role_name, description) VALUES 
('Admin', 'Administrator with full access'),
('Editor', 'Can edit content'),
('Viewer', 'Can view content');
插入權限
INSERT INTO permissions (permission_name, description) VALUES 
('view_dashboard', 'View the dashboard'),
('edit_content', 'Edit content'),
('delete_content', 'Delete content');
分配角色權限
INSERT INTO role_permissions (role_id, permission_id) VALUES 
(1, 1), -- Admin can view_dashboard
(1, 2), -- Admin can edit_content
(1, 3), -- Admin can delete_content
(2, 1), -- Editor can view_dashboard
(2, 2), -- Editor can edit_content
(3, 1); -- Viewer can view_dashboard
分配用戶角色
INSERT INTO user_roles (user_id, role_id) VALUES 
(1, 1), -- User 1 is an Admin
(2, 2), -- User 2 is an Editor
(3, 3); -- User 3 is a Viewer
分配用戶權限
INSERT INTO user_permissions (user_id, permission_id) VALUES 
(2, 3); -- User 2 can delete content directly

查詢示例

查詢用戶的所有權限
SELECT p.permission_name
FROM users u
JOIN user_roles ur ON u.user_id = ur.user_id
JOIN roles r ON ur.role_id = r.role_id
JOIN role_permissions rp ON r.role_id = rp.role_id
JOIN permissions p ON rp.permission_id = p.permission_id
WHERE u.user_id = 1UNIONSELECT p.permission_name
FROM user_permissions up
JOIN permissions p ON up.permission_id = p.permission_id
WHERE up.user_id = 1;

索引和優化

  • user_idrole_id 應該設置為外鍵,確保數據的完整性和一致性。
  • role_idpermission_idrole_permissions 表中應設置為聯合唯一索引。
  • user_idrole_iduser_roles 表中應設置為聯合唯一索引。
  • user_idpermission_iduser_permissions 表中應設置為聯合唯一索引。

通過這個設計,可以靈活地管理用戶、角色和權限,確保系統的安全性和靈活性,滿足各種復雜的權限管理需求。

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

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

相關文章

【數據結構與算法 | 基礎篇】環形數組模擬隊列

1. 前言 上文我們用環形單向鏈表實現了隊列.接下來我們用環形數組來模擬隊列.并實現了isFull()&#xff0c;isEmpty()等方法. 2. 環形數組模擬隊列 (1). Queue接口 : public interface Queue<E> {//向隊伍插入值, 插入成功返回true, 否則返回falseboolean offer(E v…

【Linux】TCP協議【上】{協議段屬性:源端口號/目的端口號/序號/確認序號/窗口大小/緊急指針/標記位}

文章目錄 1.引入2.協議段格式4位首部長度16位窗口大小32位序號思考三個問題【demo】標記位URG: 緊急指針是否有效提升某報文被處理優先級【0表示不設置1表示設置】ACK: 確認號是否有效PSH: 提示接收端應用程序立刻從TCP緩沖區把數據讀走RST: 對方要求重新建立連接; 我們把攜帶R…

windows 設置系統字體 (win11 win10)

由于微軟的字體是有版權的&#xff0c;所以我打算替換掉 1.下載替換工具 github的項目&#xff0c;看起來很多人對微軟默認字體帶版權深惡痛絕。 項目地址&#xff1a;nomeiryoUi地址 這里選取最新的版本即可 2.打開軟件 這里顯示標題欄不能改&#xff0c;確認&#xff0c;其…

蓋雅技能發展云,助力制造企業人效合一

制造行業盡管經歷多次變革&#xff0c;但企業對人的管理始終是一項高度依賴經驗和耗費人力的工作。隨著供應鏈管理和生產設備的自動化、數字化升級&#xff0c;如何將第一生產要素——人&#xff0c;通過數字化的工具融入制造過程的閉環&#xff0c;對企業實現自動化工廠和智能…

力扣 滑動窗口題目總結

Leetcode3.無重復字符的最長子串 思路&#xff1a; 這道題主要用到思路是&#xff1a;滑動窗口 什么是滑動窗口&#xff1f; 其實就是一個隊列,比如例題中的 abcabcbb&#xff0c;進入這個隊列&#xff08;窗口&#xff09;為 abc 滿足題目要求&#xff0c;當再進入 a&#x…

牛客NC334 字典序第K小【困難 10叉樹 Java/Go/PHP/C++】,力扣 440. 字典序的第K小數字

題目 題目鏈接&#xff1a; https://www.nowcoder.com/practice/670c2bda374241d7ae06ade60de33e8b https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/ 本答案核心 10叉樹, 數學規律Java代碼 import java.util.*;public class Solution {…

大模型的靈魂解讀:Anthropic AI的Claude3 Sonnet可解釋性研究

大模型技術論文不斷&#xff0c;每個月總會新增上千篇。本專欄精選論文重點解讀&#xff0c;主題還是圍繞著行業實踐和工程量產。若在某個環節出現卡點&#xff0c;可以回到大模型必備腔調重新閱讀。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;則提供了大模型領域最新技…

Vue集成Iframe

一、應用場景&#xff0c;為什么要集成Iframe&#xff1f; 1、龐大項目拆分后&#xff0c;便于管理和部署&#xff0c;用集成Iframe的方法合并 2、避免功能重復開發&#xff0c;共用模塊可單獨開發為一個項目&#xff0c;既可獨立部署&#xff0c;也可集成到中臺系統 二、集成…

[算法][前綴和] [leetcode]724. 尋找數組的中心下標

題目地址 https://leetcode.cn/problems/find-pivot-index/description/ 題目描述 代碼 class Solution {public int pivotIndex(int[] nums) {int total Arrays.stream(nums).sum();//前綴和int prefixSum 0;int len nums.length;for(int i 0;i<len;i){if (i-1>0){p…

小豬APP分發:一站式托管服務,輕松玩轉應用市場

在當今移動應用爆炸式增長的時代&#xff0c;開發者們面臨的挑戰不再僅限于創意的火花和代碼的實現&#xff0c;更在于如何讓精心打造的應用快速觸達廣大用戶。這正是小豬APP分發www.appzhu.net應運而生的背景——作為一個全面、高效的APP托管服務分發平臺&#xff0c;它為開發…

基于PHP的物業管理的設計與實現

第1章 緒論... 1 1.1 研究背景與意義... 1 1.2 國內外發展現狀... 2 第2章 關鍵技術介紹... 3 2.1 PHP語言... 3 2.2 MySQL數據庫... 3 2.3 Zend框架... 4 2.4 B/S架構... 4 第3章 系統需求分析... 5 3.1 可行性分析... 5 3.1.1 技術可行性分析... 5 3.1.2 經濟可行…

解決Java中的IllegalArgumentException異常的正確方法

解決Java中的IllegalArgumentException異常的正確方法 引言 在Java編程中&#xff0c;IllegalArgumentException是一個常見的運行時異常&#xff0c;它通常在方法接收到不合法或不適當的參數時拋出。這篇文章將詳細介紹IllegalArgumentException異常的原因、如何診斷以及解決…

金職優學:分析央國企面試如何通關?

在當今競爭激烈的就業市場中&#xff0c;中央和國有企業&#xff08;以下簡稱“央國企”&#xff09;的面試機會對求職者來說是非常有吸引力的。這些企業通常擁有穩定的發展前景、良好的薪酬福利和廣闊的職業發展空間。但是&#xff0c;要想成功通過央國企的面試&#xff0c;求…

探索Python編程世界:從基礎到實戰

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、Python語言簡介與動態特性 代碼示例&#xff1a;動態類型與變量命名 二、Python應用領…

vue 表格表頭展示不下,顯示。。。;鼠標懸浮展示全部

vue 表格表頭展示不下&#xff0c;顯示。。。&#xff1b;鼠標懸浮展示全部 <templateslot-scope"scope"slot"header"><span:title"臨時證券類型"style"white-space:nowrap">{{ 臨時證券類型 }}</span></templa…

Terminal Web終端基礎(Web IDE 技術探索 二)

Terminal是web終端技術&#xff0c;類似cmd命令窗口&#xff0c;Webcontainer 中推薦使用的是Xterm.js&#xff0c;這里就不細說Xterm.js 的使用了&#xff0c;我們使用第三方庫來實現&#xff08;原生確實有點難用&#xff09;。 vue-web-terminal 一個由 Vue 構建的支持多內容…

【設計模式】JAVA Design Patterns——Bytecode(字節碼模式)

&#x1f50d;目的 允許編碼行為作為虛擬機的指令 &#x1f50d;解釋 真實世界例子 一個團隊正在開發一款新的巫師對戰游戲。巫師的行為需要經過精心的調整和上百次的游玩測試。每次當游戲設計師想改變巫師行為時都讓程序員去修改代碼這是不妥的&#xff0c;所以巫師行為以數據…

環形鏈表Ⅱ-力扣

第一種解法時哈希表&#xff0c;set在使用insert插入時&#xff0c;會返回一個pair&#xff0c;如果pair的值為0&#xff0c;則插入失敗&#xff0c;那么返回這個插入失敗的節點&#xff0c;就是入環的第一個節點&#xff0c;代碼如下&#xff1a; /*** Definition for singly…

導航【面試準備】

導航【面試準備】 前言版權導航【面試準備】面經準備 最后 前言 2024-5-20 12:47:11 以下內容源自《【面試準備】》 僅供學習交流使用 版權 禁止其他平臺發布時刪除以下此話 本文首次發布于CSDN平臺 作者是CSDN日星月云 博客主頁是https://jsss-1.blog.csdn.net 禁止其他平…

AcW木棒-XMUOJ恢復破碎的符咒木牌-DFS與剪枝

題目 思路 話不多說&#xff0c;直接上代碼 代碼 /* AcW木棒-XMUOJ恢復破碎的符咒木牌 搜索順序&#xff1a;從小到大枚舉最終的長度 len從前往后依次拼每根長度為len的木棍 優化&#xff1a; 1.優化搜索順序&#xff1a;優先選擇深度短的來搜索&#xff0c;故從大到小去枚…