首页 > 其他分享 >多租户的后台管理系统框架涉及到在不同租户之间隔离数据(字段隔离)------------升鲜宝供应链管理系统NestJs版本(一)

多租户的后台管理系统框架涉及到在不同租户之间隔离数据(字段隔离)------------升鲜宝供应链管理系统NestJs版本(一)

时间:2024-06-18 17:37:30浏览次数:12  
标签:COMMENT 隔离 管理系统 租户 ID BIGINT ns id

在多租户系统中,为了区分平台级用户和租户级用户,我们通常会使用一个特定的租户ID来表示平台级用户和角色。这种设计确保了平台级用户和角色能够被正确识别和管理,而不会与任何具体租户的用户和角色混淆。

### 设计方案

1. **特定租户ID**:使用一个特定的租户ID(例如,`0` 或 `1`)来表示平台级用户和角色。这样可以明确区分平台级用户和租户级用户。

2. **数据库字段**:在`ns_user`和`ns_role`表中使用这个特定的租户ID来标识平台级用户和角色。

### 修改数据字典

#### **1. ns_tenant (租户表)**

无需修改,继续存储租户的基本信息。

#### **2. ns_user (用户表)**

添加注释以说明特定的租户ID用于平台级用户。

```sql
CREATE TABLE `ns_user` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键。平台用户使用特定租户ID,如0',
  `name` VARCHAR(255) NOT NULL COMMENT '用户名',
  `email` VARCHAR(255) UNIQUE COMMENT '邮箱',
  `password` VARCHAR(255) COMMENT '密码',
  `role_id` BIGINT COMMENT '角色ID,外键',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
) COMMENT='用户表,存储租户内用户的信息,平台用户使用特定租户ID';
```

#### **3. ns_role (角色表)**

添加注释以说明特定的租户ID用于平台级角色。

```sql
CREATE TABLE `ns_role` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键。平台角色使用特定租户ID,如0',
  `name` VARCHAR(255) NOT NULL COMMENT '角色名称',
  `description` TEXT COMMENT '角色描述',
  `role_type` VARCHAR(50) COMMENT '角色类型(如 platform_admin, tenant_admin)',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
) COMMENT='角色表,定义租户内不同的角色和它们的基本信息,平台角色使用特定租户ID';
```

### 完整的 SQL 语句

结合以上调整,以下是完整的SQL创建语句:

```sql
-- 创建租户表
CREATE TABLE `ns_tenant` (
  `id` BIGINT AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL COMMENT '租户名称',
  `description` TEXT COMMENT '租户描述',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`)
) COMMENT='租户表,存储租户基本信息';

-- 创建用户表
CREATE TABLE `ns_user` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键。平台用户使用特定租户ID,如0',
  `name` VARCHAR(255) NOT NULL COMMENT '用户名',
  `email` VARCHAR(255) UNIQUE COMMENT '邮箱',
  `password` VARCHAR(255) COMMENT '密码',
  `role_id` BIGINT COMMENT '角色ID,外键',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
) COMMENT='用户表,存储租户内用户的信息,平台用户使用特定租户ID';

-- 创建角色表
CREATE TABLE `ns_role` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键。平台角色使用特定租户ID,如0',
  `name` VARCHAR(255) NOT NULL COMMENT '角色名称',
  `description` TEXT COMMENT '角色描述',
  `role_type` VARCHAR(50) COMMENT '角色类型(如 platform_admin, tenant_admin)',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
) COMMENT='角色表,定义租户内不同的角色和它们的基本信息,平台角色使用特定租户ID';

-- 创建权限表
CREATE TABLE `ns_permission` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键',
  `name` VARCHAR(255) NOT NULL COMMENT '权限名称',
  `description` TEXT COMMENT '权限描述',
  `resource_type` VARCHAR(50) COMMENT '资源类型(如 button, menu, column)',
  `resource_name` VARCHAR(255) COMMENT '资源名称',
  `action` VARCHAR(50) COMMENT '允许的操作(如 read, write)',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
) COMMENT='权限表,定义系统内的权限和它们的作用范围';

-- 创建组织机构表
CREATE TABLE `ns_org` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID,外键',
  `name` VARCHAR(255) NOT NULL COMMENT '组织名称',
  `description` TEXT COMMENT '组织描述',
  `parent_id` BIGINT COMMENT '父组织ID',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`parent_id`) REFERENCES `ns_org` (`id`)
) COMMENT='组织机构表,用于管理租户内的组织结构,如部门或团队';

-- 创建菜单表
CREATE TABLE `ns_menu` (
  `id` BIGINT AUTO_INCREMENT,
  `parent_id` BIGINT COMMENT '父菜单ID,用于创建菜单层级',
  `title` VARCHAR(255) NOT NULL COMMENT '菜单标题',
  `path` VARCHAR(255)

 COMMENT '菜单对应的路径',
  `icon` VARCHAR(100) COMMENT '菜单项图标',
  `sort_order` INT COMMENT '菜单排序',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`parent_id`) REFERENCES `ns_menu` (`id`)
) COMMENT='菜单表,存储系统菜单项,通常用于构建用户界面的导航系统';

-- 创建角色菜单表
CREATE TABLE `ns_role_menu` (
  `id` BIGINT AUTO_INCREMENT,
  `role_id` BIGINT COMMENT '角色ID',
  `menu_id` BIGINT COMMENT '菜单ID',
  `permission` VARCHAR(50) COMMENT '对该菜单的具体权限(如查看、编辑)',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`),
  FOREIGN KEY (`menu_id`) REFERENCES `ns_menu` (`id`)
) COMMENT='角色菜单表,定义角色和菜单之间的关系,控制不同角色可访问的菜单项';

-- 创建角色机构权限范围表
CREATE TABLE `ns_role_org_permission` (
  `id` BIGINT AUTO_INCREMENT,
  `role_id` BIGINT COMMENT '角色ID',
  `org_id` BIGINT COMMENT '组织机构ID',
  `permission` VARCHAR(50) COMMENT '权限类型(如读、写)',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`),
  FOREIGN KEY (`org_id`) REFERENCES `ns_org` (`id`)
) COMMENT='角色机构权限范围表,定义角色在不同组织结构中的数据访问权限';

-- 创建角色数据列权限表
CREATE TABLE `ns_role_column_permission` (
  `id` BIGINT AUTO_INCREMENT,
  `role_id` BIGINT COMMENT '角色ID',
  `table_name` VARCHAR(255) COMMENT '数据表名称',
  `column_name` VARCHAR(255) COMMENT '列名称',
  `permission_type` VARCHAR(50) COMMENT '权限类型(如读、写)',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
) COMMENT='角色数据列权限表,管理角色对不同数据表列的访问权限';

-- 创建支付明细费用表
CREATE TABLE `ns_payment_detail` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID',
  `package_id` BIGINT COMMENT '套餐ID',
  `subscription_id` BIGINT COMMENT '订阅ID,关联`ns_tenant_package_subscription`表',
  `amount` DECIMAL(10, 2) COMMENT '支付金额',
  `payment_method` VARCHAR(255) COMMENT '支付方式(如信用卡、PayPal、转账等)',
  `payment_status` VARCHAR(50) COMMENT '支付状态(如`pending`, `completed`, `failed`)',
  `transaction_id` VARCHAR(255) COMMENT '交易流水号',
  `payment_date` DATETIME COMMENT '支付日期',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`),
  FOREIGN KEY (`subscription_id`) REFERENCES `ns_tenant_package_subscription` (`id`)
) COMMENT='支付明细费用表,用于记录租户订购套餐时的支付明细';

-- 创建租户套餐订阅表
CREATE TABLE `ns_tenant_package_subscription` (
  `id` BIGINT AUTO_INCREMENT,
  `tenant_id` BIGINT COMMENT '租户ID',
  `package_id` BIGINT COMMENT '套餐ID',
  `subscription_date` DATE COMMENT '订阅日期',
  `expiration_date` DATE COMMENT '到期日期',
  `status` VARCHAR(50) COMMENT '状态(如激活、过期)',
  `created_by` BIGINT COMMENT '创建人ID',
  `updated_by` BIGINT COMMENT '更新人ID',
  `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `updated_date` DATETIME COMMENT '更新时间',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`)
) COMMENT='租户套餐订阅表,管理租户订阅套餐的详情';
```

在上述设计中:
- `tenant_id`字段为`0`时表示平台级用户和角色。
- 普通租户用户和角色使用具体的`tenant_id`来标识其所属的租户。

这种设计确保了平台级用户和角色能够被正确识别和管理,不会与任何具体租户的用户和角色混淆。

  

标签:COMMENT,隔离,管理系统,租户,ID,BIGINT,ns,id
From: https://www.cnblogs.com/sunplay/p/18254763

相关文章

  • 毕业设计:人事管理系统,基于java+springboot+mysql
     一、前言介绍          困扰管理层的许多问题当中,人事管理是一定不敢忽视的一块。但是管理好人事又面临很多麻烦需要解决,例如有几个方面:第一,公司往往员工人数都比较多,如何保证能够管理到每一员工;第二,如何在工作琐碎,记录繁多的情况下将人事变动的情况反应......
  • 免费分享一套SpringBoot+Vue房地产销售管理系统【论文+源码+SQL脚本+PPT+开题报告】,帅
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue房地产销售管理系统,分享下哈。项目视频演示【免费】SpringBoot+Vue房地产销售管理系统Java毕业设计_哔哩哔哩_bilibili【免费】SpringBoot+Vue房地产销售管理系统Java毕业设计项目来自互联网,免费分享,仅供学习交流......
  • 8、k8s-资源-Namespace-空间隔离
    Namespace是kubernetes系统中一种非常重要的资源、它主要的作用是用来实现多套环境的资源隔离或者多租户的资源隔离。默认情况下、kubernetes集群中的所有Pod都是可以互相访问的、但是在实际生产环境中、是不能让两个Pod之间进行互相访问的、这时候就可以将两个Pod划分到不同的n......
  • 智慧启航:船舶能源管理系统助力绿色海洋未来
    在蓝色的大海上,无数船只乘风破浪,为全球的贸易和文化交流贡献着力量。然而,随着环保意识的提升和可持续发展的要求,船舶的能源消耗和排放问题逐渐成为了人们关注的焦点。在这个关键时刻,船舶能源管理系统应运而生,它不仅为航运业带来了革命性的变革,更为我们描绘了一幅绿色、智能的航运......
  • Java毕业设计-基于springboot开发的图书商城管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员功能介绍1.1图书列表1.2图书订单信息管理1.3图书类型管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的图书......
  • Java毕业设计-基于springboot开发的图书进销存管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、用户信息管理2、图书类型管理3、商品退货管理4、客户信息管理5、图书添加6、客户添加7、应收金额四、毕设内容和源代码获取总结Java......
  • 微信小程序毕业设计-社区超市管理系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 基于Springboot框架班级综合测评管理系统的设计与实现
    开头语:你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:Springboot框架,B/S模式工具:MyEclipse系统展示首页个人中心学生管理综合测评管理摘要随着互联网技术的高速发展,班级综合测评管理系统应运而生,旨在实现学校管......
  • 用Python实现学生信息管理系统
    哈喽......
  • 基于Java+Vue的采购管理系统:实现采购业务数字化(全套源码)
    前言:采购管理系统是一个综合性的管理平台,旨在提高采购过程的效率、透明度,并优化供应商管理。以下是对各个模块的详细解释:一、供应商准入供应商注册:供应商通过在线平台进行注册,填写基本信息和资质文件。资质审核:系统对供应商提交的资质文件进行自动或人工审核,确保供应商符......