mysql 权限控制系统数据库设计方案

核心表结构

1. 用户表(users)

CREATE TABLE users (user_id         BIGINT       PRIMARY KEY AUTO_INCREMENT,username        VARCHAR(50)  NOT NULL UNIQUE,password        VARCHAR(255) NOT NULL,email          VARCHAR(100) UNIQUE,real_name      VARCHAR(50),phone          VARCHAR(20),status         TINYINT      DEFAULT 1 COMMENT '1:启用,0:禁用',created_at     DATETIME     DEFAULT CURRENT_TIMESTAMP,updated_at     DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,last_login     DATETIME,deleted_at     DATETIME     COMMENT '软删除时间',INDEX idx_username (username),INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

2. 角色表(roles)

CREATE TABLE roles (role_id        BIGINT       PRIMARY KEY AUTO_INCREMENT,role_name      VARCHAR(50)  NOT NULL UNIQUE,role_code      VARCHAR(50)  NOT NULL UNIQUE COMMENT '角色编码',description    VARCHAR(200),status         TINYINT      DEFAULT 1 COMMENT '1:启用,0:禁用',created_at     DATETIME     DEFAULT CURRENT_TIMESTAMP,updated_at     DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_role_code (role_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

3. 权限表(permissions)

CREATE TABLE permissions (permission_id   BIGINT       PRIMARY KEY AUTO_INCREMENT,parent_id      BIGINT       DEFAULT 0 COMMENT '父权限ID',perm_name      VARCHAR(50)  NOT NULL,perm_code      VARCHAR(100) NOT NULL UNIQUE COMMENT '权限编码',perm_type      TINYINT     DEFAULT 1 COMMENT '1:菜单,2:按钮,3:接口',path           VARCHAR(200) COMMENT '前端路由路径',component      VARCHAR(200) COMMENT '前端组件路径',icon           VARCHAR(50)  COMMENT '图标',sort_order     INT         DEFAULT 0 COMMENT '排序',status         TINYINT     DEFAULT 1 COMMENT '1:启用,0:禁用',created_at     DATETIME    DEFAULT CURRENT_TIMESTAMP,updated_at     DATETIME    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_parent_id (parent_id),INDEX idx_perm_code (perm_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';

4. 用户角色关联表(user_roles)

CREATE TABLE user_roles (user_id        BIGINT,role_id        BIGINT,created_at     DATETIME    DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, role_id),CONSTRAINT fk_ur_user_id FOREIGN KEY (user_id) REFERENCES users(user_id),CONSTRAINT fk_ur_role_id FOREIGN KEY (role_id) REFERENCES roles(role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';

5. 角色权限关联表(role_permissions)

CREATE TABLE role_permissions (role_id        BIGINT,permission_id  BIGINT,created_at     DATETIME    DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (role_id, permission_id),CONSTRAINT fk_rp_role_id FOREIGN KEY (role_id) REFERENCES roles(role_id),CONSTRAINT fk_rp_permission_id FOREIGN KEY (permission_id) REFERENCES permissions(permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

6. 部门表(departments)- 可选

CREATE TABLE departments (dept_id        BIGINT       PRIMARY KEY AUTO_INCREMENT,parent_id      BIGINT       DEFAULT 0,dept_name      VARCHAR(50)  NOT NULL,dept_code      VARCHAR(50)  NOT NULL UNIQUE,leader_id      BIGINT       COMMENT '部门负责人ID',sort_order     INT          DEFAULT 0,status         TINYINT      DEFAULT 1 COMMENT '1:启用,0:禁用',created_at     DATETIME     DEFAULT CURRENT_TIMESTAMP,updated_at     DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,INDEX idx_parent_id (parent_id),INDEX idx_dept_code (dept_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';

扩展表结构

1. 操作日志表(operation_logs)

CREATE TABLE operation_logs (log_id         BIGINT       PRIMARY KEY AUTO_INCREMENT,user_id        BIGINT       NOT NULL,operation      VARCHAR(200) NOT NULL COMMENT '操作描述',method         VARCHAR(100) COMMENT '请求方法',params         TEXT         COMMENT '请求参数',ip             VARCHAR(50)  COMMENT '操作IP',location       VARCHAR(100) COMMENT '操作地点',created_at     DATETIME     DEFAULT CURRENT_TIMESTAMP,INDEX idx_user_id (user_id),INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';

2. 数据权限表(data_permissions)- 可选

CREATE TABLE data_permissions (id             BIGINT       PRIMARY KEY AUTO_INCREMENT,role_id        BIGINT       NOT NULL,dept_id        BIGINT       NOT NULL,data_type      TINYINT     DEFAULT 1 COMMENT '1:本部门数据,2:本部门及下级数据,3:全部数据',created_at     DATETIME    DEFAULT CURRENT_TIMESTAMP,UNIQUE KEY uk_role_dept (role_id, dept_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据权限表';

设计说明

1. RBAC模型说明

  • 采用基于角色的访问控制(RBAC)模型
  • 用户与角色是多对多关系
  • 角色与权限是多对多关系
  • 权限支持菜单、按钮、接口三种类型

2. 核心功能支持

  • 用户管理:支持用户的增删改查、启用禁用
  • 角色管理:支持角色的增删改查、权限分配
  • 权限管理:支持权限的增删改查、树形结构展示
  • 部门管理:支持组织架构管理(可选)
  • 操作日志:记录用户操作轨迹
  • 数据权限:支持按部门划分数据权限(可选)

3. 性能优化建议

  1. 索引优化

    • 主键使用自增ID
    • 为常用查询字段创建索引
    • 避免过度建立索引
  2. 查询优化

    • 使用JOIN代替子查询
    • 合理使用缓存
    • 分页查询大数据量

4. 安全性建议

  1. 密码安全

    • 密码加密存储
    • 定期修改密码
    • 密码强度验证
  2. 访问控制

    • Session管理
    • Token验证
    • 防SQL注入
  3. 日志记录

    • 记录关键操作
    • 定期备份日志
    • 异常监控告警

示例查询

1. 获取用户的所有角色

SELECT r.* 
FROM roles r 
JOIN user_roles ur ON r.role_id = ur.role_id 
WHERE ur.user_id = ?;

2. 获取角色的所有权限

SELECT p.* 
FROM permissions p 
JOIN role_permissions rp ON p.permission_id = rp.permission_id 
WHERE rp.role_id = ?;

3. 获取用户的所有权限

SELECT DISTINCT p.* 
FROM permissions p 
JOIN role_permissions rp ON p.permission_id = rp.permission_id 
JOIN user_roles ur ON rp.role_id = ur.role_id 
WHERE ur.user_id = ?;

缓存策略

1. 权限缓存

// 示例缓存key设计
String userPermissionKey = "user:permissions:" + userId;
String rolePermissionKey = "role:permissions:" + roleId;

2. 缓存更新策略

  • 权限变更时更新缓存
  • 定时刷新缓存
  • 采用多级缓存架构

接口设计建议

1. RESTful API

GET    /api/users           # 获取用户列表
POST   /api/users           # 创建用户
PUT    /api/users/{id}      # 更新用户
DELETE /api/users/{id}      # 删除用户

2. 权限检查注解

@RequiresPermissions("user:view")
public Response getUserList() {// 实现代码
}

部署建议

1. 数据库部署

  • 主从复制
  • 定期备份
  • 监控告警

2. 应用部署

  • 集群部署
  • 负载均衡
  • 容器化管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35664.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker - 切换源 (Linux / macOS)

文章目录 Linux 系统macOS 系统 Linux 系统 修改配置文件:/etc/docker/daemon.json "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]验证是否修改成功: docker info重启 …

hcia复习

一、网络设备 1、交换机:(1)提供MAC地址表,转发数据; (2)每个接口是一个独立的冲突域; (3)凡是连在交换机上的所有设备都处于同一广播域(网络&am…

opencv初步学习——图像处理3

这一部分我们将学习opencv中对图像大小进行调整的基本操作,以及掩模操作,我们直接进入正言 一、cv2.resize( )函数 1-1、组成与构造 该函数的作用就算用来帮助我们实现对图像大小的处理,具体的组成与构造如下: cv2.resize(src , …

[LevelDB]关于LevelDB存储架构到底怎么设计的?

本文内容组织形式 LevelDB 存储架构重要特点总体概括LevelDB中内存模型MemTableMemTable的数据结构背景:SkipListSkiplist的数据结构 Skiplist的数据访问细节 SkipList的核心方法Node细节源代码 MemTable的数据加速方式Iterator 的核心方法 MemTable 的读取&写入…

【存储中间件】Redis核心技术与实战(四):Redis高并发高可用(Redis集群 Smart客户端、集群原理)

文章目录 Redis集群Smart客户端smart客户端原理ASK 重定向集群下的Jedis客户端Hash tags 集群原理节点通信通信流程Gossip 消息节点选择 故障转移故障发现主观下线客观下线 故障恢复资格检查准备选举时间发起选举选举投票替换主节点 故障转移时间 集群不可用判定集群读写分离 个…

【接口耗时】⭐️自定义拦截器实现接口耗时统计

💥💥✈️✈️欢迎阅读本文章❤️❤️💥💥 🏆本篇文章阅读大约耗时三分钟。 ⛳️motto:不积跬步、无以千里 📋📋📋本文目录如下:🎁🎁&a…

杨校老师课堂之编程入门与软件安装【图文笔记】

亲爱的同学们,热烈欢迎踏入青少年编程的奇妙世界! 我是你们的授课老师杨校 ,期待与大家一同开启编程之旅。 1. 轻松叩开编程之门 1.1 程序的定义及生活中的应用 程序是人与计算机沟通的工具。在日常生活中,像手机里的各类 APP、电…

【从零开始】Air780EPM的LuatOS二次开发——OneWire协议调试注意事项!

当涉及到与传感器、执行器等外部设备交互时,OneWire协议的高效调试成为决定项目成败的关键环节。OneWire协议(单总线协议)以其仅需一根数据线即可实现设备通信的极简特性,被广泛应用于温度传感器、身份识别模块等场景。 一、LuatO…

redis数据结构、多路复用、持久化---java

数据结构 Redis 提供了丰富的数据类型,常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset&am…

vue3之写一个aichat ----vite.config.js

vite.config.js的CSS配置 postcss-pxtorem 开发响应式网页的时候需要用到postcss-pxtorem amfe-flexible amfe-flexible是由阿里团队开发的一个库,它可以根据设备的屏幕宽度去动态调整HTML根元素()的字体大小,这意味着无论用户使用什么尺寸的设备访问你…

强化学习(赵世钰版)-学习笔记(8.值函数方法)

本章是算法与方法的第四章,是TD算法的拓展,本质上是将状态值与行为值的表征方式,从离散的表格形式,拓展到了连续的函数形式。 表格形式的优点是直观,便于分析,缺点是数据量较大或者连续性状态或者行为空间时…

C++模版(进阶)

文章目录 一、非类型模版参数二、模版的特化2.1 概念2.2 函数模版特化2.2.1 函数模版特化为指针类型注意事项 2.3 类模版特化2.3.1 全特化2.3.2 偏特化(半特化)2.3.3 类模板特化应用示例 三、模版分离编译3.1 什么是分离编译?3.2 模版的分离编译3.3 解决方法! 四、模…

Linux配置yum仓库,服务控制,防火墙

一、yum仓库 1.在安装软件时,首先第一步就是要考虑软件的版本的问题! 2.软件的安装:最安全可靠的方法就是去软件对应的官网上查看安装手册(包括的软件的下载) 红帽系软件安装的常见的3种方式 (1&#x…

布谷直播系统源码开发实战:从架构设计到性能优化

作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。 一、 …

实战设计模式之解释器模式

概述 作为一种行为设计模式,解释器模式提供了一种方法来定义语言的文法规则,并通过这些规则解析和处理特定类型的语言句子。简单来说,解释器模式允许我们定义一个代表某种语言中语法规则的对象结构,从而能够根据这些规则理解并处理…

物联网边缘计算网关是什么?

在物联网的浩瀚架构中,边缘计算网关宛如一位坚毅的前沿哨兵,默默守护着数据处理与传输的关键防线,为整个物联网系统的高效运转发挥着不可或缺的作用。 一、边缘计算网关的定义与基本功能 边缘计算网关是一种智能设备,它被部署在…

计算机视觉算法实战——障碍物识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​ ​​​​​​ ​ ​ 1. 引言 计算机视觉是人工智能领域的一个重要分支,旨在通过计算机模拟人类的视觉系统,从…

Win11锁屏后显示“天气、市场、广告”如何取消显示

关闭方法:设置>个性化>锁屏界面>锁屏界面状态>"无"。 方法一:通过“个性化”设置 打开“设置”应用: 点击屏幕左下角的“开始”按钮(Windows 图标)。点击齿轮状的“设置”图标。或者按下 Win I…

10天速通强化学习-008

TRPO 思考-TRPO-在线策略-给定信任区域防止更新不稳定 Actor-Critic网络随着网络深度的增加,步长太长,梯度更新会变差。改变方法-增加信任区域。(trust region policy optimization)-TRPO算法: 核心思想: 是在每次迭代中&…

整合百款经典街机游戏的模拟器介绍

对于80、90后而言,街机游戏承载着童年的欢乐记忆。今天要给大家介绍一款超棒的软件——「MXui街机厅经典游戏101款」,它能带你重回那段热血沸腾的街机时光。 「MXui街机厅经典游戏101款」是一款绿色免安装的街机模拟器,体积约1.39G。无需繁琐…