经典权限系统设计(五张表)

简介: 经典权限系统设计(五张表)

经典权限系统设计(五张表)

大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。

  各表的大体表结构如下:

  1、用户表(UserInfo):Id、UserName、UserPwd

  2、角色表(RoleInfo):Id、RoleName

  3、菜单表(MenuInfo):Id、MenuName

  4、用户角色表(UserRole):Id、UserId、RoleId

  5、角色菜单表(RoleMenu):Id、RoleId、MenuId

最关键的地方是,某个用户登录时,如何查找该用户的菜单权限?其实一条语句即可搞定:

假如用户的用户名为zhangsan,则他的菜单权限查询如下:

Select m.Id,m.MenuName from MenuInfo m ,UserInfo u UserRole ur, RoleMenu rm Where m.Id = rm.MenuId and ur.RoleId = rm.RoleId and ur.UserId = u.Id and u.UserName = 'zhangsan'

权限管理系统经典的五张表

DESC t_user
DESC t_role
DESC t_menu
DESC t_userrole

DROP TABLE IF EXISTS t_user;
DROP TABLE IF EXISTS t_role;
DROP TABLE IF EXISTS t_menu;
DROP TABLE IF EXISTS t_userrole;

CREATE TABLE t_user(
usr_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
usr_account VARCHAR(32) NOT NULL UNIQUE COMMENT '账号',
usr_password CHAR(32) NOT NULL COMMENT '密码'
)COMMENT '用户表';

CREATE TABLE t_role(
ro_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
ro_name VARCHAR(32) NOT NULL UNIQUE COMMENT '角色名'
)COMMENT '角色表';

CREATE TABLE t_menu(
mu_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
mu_name VARCHAR(32) NOT NULL UNIQUE COMMENT '菜名'
)COMMENT '菜单表';

CREATE TABLE t_userrole(
ur_usr_id INT COMMENT '用户ID',
ur_ro_id INT COMMENT '角色ID'
)COMMENT '用户角色表';

CREATE TABLE t_rolemenu(
rm_ro_id INT COMMENT '角色ID',
rm_mu_id INT COMMENT '菜单ID',
PRIMARY KEY(rm_ro_id,rm_mu_id),
FOREIGN KEY(rm_ro_id) REFERENCES t_role(ro_id),
FOREIGN KEY(rm_mu_id) REFERENCES t_menu(mu_id)
)COMMENT '角色菜单表';

INSERT INTO t_user(usr_account,usr_password) VALUES('chenxueli','111'); -- SYS
INSERT INTO t_user(usr_account,usr_password) VALUES('chensheng','222'); -- SYSTEM
INSERT INTO t_user(usr_account,usr_password) VALUES('zsf','333'); -- ADMIN
INSERT INTO t_user(usr_account,usr_password) VALUES('zs','444'); -- USER

INSERT INTO t_role(ro_name) VALUES('SYS');
INSERT INTO t_role(ro_name) VALUES('SYSTEM');
INSERT INTO t_role(ro_name) VALUES('ADMIN');
INSERT INTO t_role(ro_name) VALUES('USER');

INSERT INTO t_menu(mu_name) VALUES('拉黑用户');-- SYS
INSERT INTO t_menu(mu_name) VALUES('运费险');-- SYS SYSTEM
INSERT INTO t_menu(mu_name) VALUES('上架');-- SYS SYSTEM ADMIN
INSERT INTO t_menu(mu_name) VALUES('下架');-- SYS SYSTEM ADMIN
INSERT INTO t_menu(mu_name) VALUES('下单');-- USER
INSERT INTO t_menu(mu_name) VALUES('付款');-- USER

INSERT INTO t_userrole VALUES(1,1),(1,2);
INSERT INTO t_userrole VALUES(2,2);
INSERT INTO t_userrole VALUES(3,3);
INSERT INTO t_userrole VALUES(4,4);

INSERT INTO t_rolemenu VALUES(1,1),(1,2);
INSERT INTO t_rolemenu VALUES(2,2),(2,3)(2,4);
INSERT INTO t_rolemenu VALUES(3,3),(3,4);
INSERT INTO t_rolemenu VALUES(4,5),(4,6);

SELECT * FROM t_rolemenu ORDER BY ro_id;
相关文章
|
设计模式 算法 安全
【设计模式】RBAC 模型详解
随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。
3337 1
|
存储 数据安全/隐私保护 索引
设计一个完美的用户角色权限表
设计一个完美的用户角色权限表
1743 1
|
9月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
1170 1
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
8月前
|
缓存 前端开发 JavaScript
全栈管理系统:Node.js + Express + MySQL + React + Antd
基于 Node.js + React 的全栈管理系统,集成 JWT 认证、动态权限路由、SSE 实时通知与审计日志。支持单点登录、RBAC 权限控制及多环境部署,提供完整前后端分离架构与 Docker 一键部署方案,助力开发者快速构建企业级应用。
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
7786 14
Spring Boot 3 集成 Spring Security + JWT
|
监控 NoSQL Java
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
若依(RuoYi)是一款基于Spring Boot和Vue.js的开源Java快速开发脚手架,支持OAuth2、JWT鉴权,集成多种安全框架和持久化框架。它提供了系统管理、监控管理、任务调度、代码生成等常用功能模块,适合中小型公司快速搭建Web应用。本文主要介绍若依框架的特点、版本发展、优缺点及项目部署步骤,帮助开发者快速上手并部署若依项目。
22076 3
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
|
存储 NoSQL 中间件
单点登录的原理、实现、以及技术方案比较详解
本文详细介绍单点登录(SSO)的定义、原理、实现细节,探讨其在大型网站中的应用,帮助读者理解如何通过分布式Session实现高效的用户认证与授权。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
单点登录的原理、实现、以及技术方案比较详解
|
前端开发 JavaScript Docker
拿下奇怪的前端报错(五):SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 基于容器搭建开发环境或许是更好的选择
在前端开发中,同时维护多个项目时可能会遇到不同Node.js版本的问题。低版本Node.js可能导致依赖无法安装或启动失败,而高版本Node.js则可能引起第三方库的兼容性问题。推荐使用Docker搭建独立的开发环境,以避免版本不一致带来的困扰。
4145 3
|
JavaScript 前端开发 Java
花了一天时间, 搜刮的个人觉得不错的16套vue3后台管理模版
花了一天时间, 搜刮的个人觉得不错的16套vue3后台管理模版
7509 2
花了一天时间, 搜刮的个人觉得不错的16套vue3后台管理模版