企业级权限表结构设计经典设计--纯个人分享

2025博客之星年度评选已开启 10w+人浏览 1.1k人参与


我的权限表设计思路如下:

  1. 采用RBAC(基于角色的访问控制)模型

  2. 主要包含四个核心表:

    • 用户表:存储用户基本信息
    • 角色表:定义系统角色
    • 权限表:记录具体操作权限
    • 用户角色关联表:建立用户与角色的多对多关系
    • 角色权限关联表:建立角色与权限的多对多关系
  3. 设计特点:

    • 通过角色间接分配权限,简化权限管理
    • 支持权限继承,上级角色自动继承下级权限
    • 预留字段支持权限扩展
    • 使用状态标识实现权限的灵活启用/禁用
  4. 优化考虑:

    • 建立合适的索引提升查询效率
    • 使用外键确保数据完整性
    • 通过缓存机制减少频繁查询
  5. 实现租户级别的用户隔离

我的数据库表结构:

/*
SQLyog Ultimate v13.1.1 (64 bit)
MySQL - 8.0.30 : Database - carbon_management
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`carbon_management` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

USE `carbon_management`;

/*Table structure for table `sys_permission` */

DROP TABLE IF EXISTS `sys_permission`;

CREATE TABLE `sys_permission` (
  `id` varchar(36) NOT NULL,
  `code` varchar(100) NOT NULL,
  `name` varchar(50) NOT NULL,
  `description` varchar(200) DEFAULT NULL,
  `resource_type` varchar(20) NOT NULL,
  `resource_url` varchar(200) DEFAULT NULL,
  `resource_method` varchar(20) DEFAULT NULL,
  `parent_id` varchar(36) DEFAULT NULL,
  `sort_order` int DEFAULT NULL,
  `tenant_id` varchar(36) NOT NULL,
  `created_by` varchar(36) NOT NULL,
  `created_time` datetime NOT NULL,
  `updated_by` varchar(36) DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `sys_role` */

DROP TABLE IF EXISTS `sys_role`;

CREATE TABLE `sys_role` (
  `id` varchar(36) NOT NULL,
  `code` varchar(50) NOT NULL,
  `name` varchar(50) NOT NULL,
  `description` varchar(200) DEFAULT NULL,
  `tenant_id` varchar(36) NOT NULL,
  `created_by` varchar(36) NOT NULL,
  `created_time` datetime NOT NULL,
  `updated_by` varchar(36) DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  `status` varchar(1) DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `sys_role_permission` */

DROP TABLE IF EXISTS `sys_role_permission`;

CREATE TABLE `sys_role_permission` (
  `role_id` varchar(36) NOT NULL,
  `permission_id` varchar(36) NOT NULL,
  PRIMARY KEY (`role_id`,`permission_id`),
  KEY `permission_id` (`permission_id`),
  CONSTRAINT `sys_role_permission_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE,
  CONSTRAINT `sys_role_permission_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `sys_permission` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `sys_tenant` */

DROP TABLE IF EXISTS `sys_tenant`;

CREATE TABLE `sys_tenant` (
  `id` varchar(36) NOT NULL,
  `code` varchar(50) NOT NULL,
  `name` varchar(100) NOT NULL,
  `description` varchar(500) DEFAULT NULL,
  `contact_name` varchar(50) DEFAULT NULL,
  `contact_phone` varchar(20) DEFAULT NULL,
  `contact_email` varchar(100) DEFAULT NULL,
  `status` enum('ACTIVE','INACTIVE','EXPIRED','SUSPENDED') NOT NULL,
  `carbon_quota` decimal(38,2) DEFAULT NULL,
  `quota_expiration_date` datetime DEFAULT NULL,
  `created_by` varchar(36) NOT NULL,
  `created_time` datetime NOT NULL,
  `updated_by` varchar(36) DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `sys_user` */

DROP TABLE IF EXISTS `sys_user`;

CREATE TABLE `sys_user` (
  `id` varchar(36) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `real_name` varchar(50) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `status` enum('ACTIVE','INACTIVE','LOCKED','DELETED') NOT NULL,
  `tenant_id` varchar(36) NOT NULL,
  `created_by` varchar(36) NOT NULL,
  `created_time` datetime NOT NULL,
  `updated_by` varchar(36) DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  `last_login_time` datetime DEFAULT NULL,
  `last_login_ip` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `idx_sys_user_username` (`username`),
  KEY `idx_sys_user_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `sys_user_role` */

DROP TABLE IF EXISTS `sys_user_role`;

CREATE TABLE `sys_user_role` (
  `user_id` varchar(36) NOT NULL,
  `role_id` varchar(36) NOT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  `created_by` varchar(36) DEFAULT NULL,
  `created_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`user_id`,`role_id`,`id`),
  KEY `role_id` (`role_id`),
  KEY `id` (`id`),
  CONSTRAINT `sys_user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE,
  CONSTRAINT `sys_user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

在这里插入图片描述

🔐 碳管理系统权限体系详解

提供的数据库表结构,我给大家分析下完整的权限体系:

🏗️ 核心架构:多租户RBAC模型

租户 (sys_tenant)
├── 用户 (sys_user)
│   └── ←→ 角色 (sys_role)
│         └── ←→ 权限 (sys_permission)
└── 数据隔离边界

📊 权限表关系

表名作用关键字段
sys_tenant租户管理code, name, status, carbon_quota
sys_user用户管理username, password, tenant_id, status
sys_role角色管理code, name, tenant_id, status
sys_permission权限管理code, resource_url, resource_method
sys_user_role用户角色关联user_id, role_id
sys_role_permission角色权限关联role_id, permission_id

🔗 权限控制流程

  1. 多租户隔离user.tenant_id 控制数据访问范围
  2. 角色分配:通过 sys_user_role 关联表
  3. 权限授权:通过 sys_role_permission 关联表
  4. API验证:基于 resource_urlresource_method

🎯 权限验证维度

用户请求
JWT解析
用户身份验证
租户权限检查
角色权限检查
API权限验证
允许/拒绝访问

📋 关键安全特性

  1. 多租户数据隔离

    • 每个用户绑定特定租户
    • 跨租户数据访问被严格禁止
    • 租户配额和状态管理
  2. 细粒度权限控制

    • 资源类型分类
    • HTTP方法级别权限(GET/POST/PUT/DELETE)
    • 支持权限层次结构(parent_id)
  3. RBAC角色管理

    • 用户可多角色
    • 角色权限灵活配置
    • 租户级角色定制

🛠️ 分析工具

我已创建了完整的分析工具:

  1. analyze-permissions.sql - 全面权限数据分析
  2. visualize-permissions.sql - 权限关系可视化
  3. check-permissions.bat - 一键执行分析
  4. PERMISSION_SYSTEM.md - 详细文档

🚀 使用方法

cd c:/DevOpsK8s/ABC/carbon-manage-platform
./check-permissions.bat

这将显示:

  • 所有租户、用户、角色、权限的完整关系
  • 权限分配统计
  • 用户具体权限详情
  • 权限层次结构

这个权限体系设计非常完善,支持企业级多租户场景,具有良好的扩展性和安全性!
大家有好的建议可以一起学习,欢迎提出改进意见

需要分析工具的可以私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值