权限体系设计
我的权限表设计思路如下:
-
采用RBAC(基于角色的访问控制)模型
-
主要包含四个核心表:
- 用户表:存储用户基本信息
- 角色表:定义系统角色
- 权限表:记录具体操作权限
- 用户角色关联表:建立用户与角色的多对多关系
- 角色权限关联表:建立角色与权限的多对多关系
-
设计特点:
- 通过角色间接分配权限,简化权限管理
- 支持权限继承,上级角色自动继承下级权限
- 预留字段支持权限扩展
- 使用状态标识实现权限的灵活启用/禁用
-
优化考虑:
- 建立合适的索引提升查询效率
- 使用外键确保数据完整性
- 通过缓存机制减少频繁查询
-
实现租户级别的用户隔离
我的数据库表结构:
/*
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 |
🔗 权限控制流程
- 多租户隔离:
user.tenant_id控制数据访问范围 - 角色分配:通过
sys_user_role关联表 - 权限授权:通过
sys_role_permission关联表 - API验证:基于
resource_url和resource_method
🎯 权限验证维度
📋 关键安全特性
-
多租户数据隔离
- 每个用户绑定特定租户
- 跨租户数据访问被严格禁止
- 租户配额和状态管理
-
细粒度权限控制
- 资源类型分类
- HTTP方法级别权限(GET/POST/PUT/DELETE)
- 支持权限层次结构(parent_id)
-
RBAC角色管理
- 用户可多角色
- 角色权限灵活配置
- 租户级角色定制
🛠️ 分析工具
我已创建了完整的分析工具:
analyze-permissions.sql- 全面权限数据分析visualize-permissions.sql- 权限关系可视化check-permissions.bat- 一键执行分析PERMISSION_SYSTEM.md- 详细文档
🚀 使用方法
cd c:/DevOpsK8s/ABC/carbon-manage-platform
./check-permissions.bat
这将显示:
- 所有租户、用户、角色、权限的完整关系
- 权限分配统计
- 用户具体权限详情
- 权限层次结构
这个权限体系设计非常完善,支持企业级多租户场景,具有良好的扩展性和安全性!
大家有好的建议可以一起学习,欢迎提出改进意见
需要分析工具的可以私信
1149

被折叠的 条评论
为什么被折叠?



