多租户的后台管理系统框架涉及到在不同租户之间隔离数据(字段隔离)------ ...

打印 上一主题 下一主题

主题 923|帖子 923|积分 2769

  1. 在多租户系统中,为了区分平台级用户和租户级用户,我们通常会使用一个特定的租户ID来表示平台级用户和角色。这种设计确保了平台级用户和角色能够被正确识别和管理,而不会与任何具体租户的用户和角色混淆。
  2. ### 设计方案
  3. 1. **特定租户ID**:使用一个特定的租户ID(例如,`0` 或 `1`)来表示平台级用户和角色。这样可以明确区分平台级用户和租户级用户。
  4. 2. **数据库字段**:在`ns_user`和`ns_role`表中使用这个特定的租户ID来标识平台级用户和角色。
  5. ### 修改数据字典
  6. #### **1. ns_tenant (租户表)**
  7. 无需修改,继续存储租户的基本信息。
  8. #### **2. ns_user (用户表)**
  9. 添加注释以说明特定的租户ID用于平台级用户。
  10. ```sql
  11. CREATE TABLE `ns_user` (
  12.   `id` BIGINT AUTO_INCREMENT,
  13.   `tenant_id` BIGINT COMMENT '租户ID,外键。平台用户使用特定租户ID,如0',
  14.   `name` VARCHAR(255) NOT NULL COMMENT '用户名',
  15.   `email` VARCHAR(255) UNIQUE COMMENT '邮箱',
  16.   `password` VARCHAR(255) COMMENT '密码',
  17.   `role_id` BIGINT COMMENT '角色ID,外键',
  18.   `sort_code` INT COMMENT '排序码',
  19.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  20.   `remark` TEXT COMMENT '备注',
  21.   `created_by` BIGINT COMMENT '创建人ID',
  22.   `updated_by` BIGINT COMMENT '更新人ID',
  23.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  24.   `created_date` DATETIME COMMENT '创建时间',
  25.   `updated_date` DATETIME COMMENT '更新时间',
  26.   PRIMARY KEY (`id`),
  27.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  28.   FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
  29. ) COMMENT='用户表,存储租户内用户的信息,平台用户使用特定租户ID';
  30. ```
  31. #### **3. ns_role (角色表)**
  32. 添加注释以说明特定的租户ID用于平台级角色。
  33. ```sql
  34. CREATE TABLE `ns_role` (
  35.   `id` BIGINT AUTO_INCREMENT,
  36.   `tenant_id` BIGINT COMMENT '租户ID,外键。平台角色使用特定租户ID,如0',
  37.   `name` VARCHAR(255) NOT NULL COMMENT '角色名称',
  38.   `description` TEXT COMMENT '角色描述',
  39.   `role_type` VARCHAR(50) COMMENT '角色类型(如 platform_admin, tenant_admin)',
  40.   `sort_code` INT COMMENT '排序码',
  41.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  42.   `remark` TEXT COMMENT '备注',
  43.   `created_by` BIGINT COMMENT '创建人ID',
  44.   `updated_by` BIGINT COMMENT '更新人ID',
  45.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  46.   `created_date` DATETIME COMMENT '创建时间',
  47.   `updated_date` DATETIME COMMENT '更新时间',
  48.   PRIMARY KEY (`id`),
  49.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
  50. ) COMMENT='角色表,定义租户内不同的角色和它们的基本信息,平台角色使用特定租户ID';
  51. ```
  52. ### 完整的 SQL 语句
  53. 结合以上调整,以下是完整的SQL创建语句:
  54. ```sql
  55. -- 创建租户表
  56. CREATE TABLE `ns_tenant` (
  57.   `id` BIGINT AUTO_INCREMENT,
  58.   `name` VARCHAR(255) NOT NULL COMMENT '租户名称',
  59.   `description` TEXT COMMENT '租户描述',
  60.   `sort_code` INT COMMENT '排序码',
  61.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  62.   `remark` TEXT COMMENT '备注',
  63.   `created_by` BIGINT COMMENT '创建人ID',
  64.   `updated_by` BIGINT COMMENT '更新人ID',
  65.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  66.   `created_date` DATETIME COMMENT '创建时间',
  67.   `updated_date` DATETIME COMMENT '更新时间',
  68.   PRIMARY KEY (`id`)
  69. ) COMMENT='租户表,存储租户基本信息';
  70. -- 创建用户表
  71. CREATE TABLE `ns_user` (
  72.   `id` BIGINT AUTO_INCREMENT,
  73.   `tenant_id` BIGINT COMMENT '租户ID,外键。平台用户使用特定租户ID,如0',
  74.   `name` VARCHAR(255) NOT NULL COMMENT '用户名',
  75.   `email` VARCHAR(255) UNIQUE COMMENT '邮箱',
  76.   `password` VARCHAR(255) COMMENT '密码',
  77.   `role_id` BIGINT COMMENT '角色ID,外键',
  78.   `sort_code` INT COMMENT '排序码',
  79.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  80.   `remark` TEXT COMMENT '备注',
  81.   `created_by` BIGINT COMMENT '创建人ID',
  82.   `updated_by` BIGINT COMMENT '更新人ID',
  83.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  84.   `created_date` DATETIME COMMENT '创建时间',
  85.   `updated_date` DATETIME COMMENT '更新时间',
  86.   PRIMARY KEY (`id`),
  87.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  88.   FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
  89. ) COMMENT='用户表,存储租户内用户的信息,平台用户使用特定租户ID';
  90. -- 创建角色表
  91. CREATE TABLE `ns_role` (
  92.   `id` BIGINT AUTO_INCREMENT,
  93.   `tenant_id` BIGINT COMMENT '租户ID,外键。平台角色使用特定租户ID,如0',
  94.   `name` VARCHAR(255) NOT NULL COMMENT '角色名称',
  95.   `description` TEXT COMMENT '角色描述',
  96.   `role_type` VARCHAR(50) COMMENT '角色类型(如 platform_admin, tenant_admin)',
  97.   `sort_code` INT COMMENT '排序码',
  98.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  99.   `remark` TEXT COMMENT '备注',
  100.   `created_by` BIGINT COMMENT '创建人ID',
  101.   `updated_by` BIGINT COMMENT '更新人ID',
  102.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  103.   `created_date` DATETIME COMMENT '创建时间',
  104.   `updated_date` DATETIME COMMENT '更新时间',
  105.   PRIMARY KEY (`id`),
  106.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
  107. ) COMMENT='角色表,定义租户内不同的角色和它们的基本信息,平台角色使用特定租户ID';
  108. -- 创建权限表
  109. CREATE TABLE `ns_permission` (
  110.   `id` BIGINT AUTO_INCREMENT,
  111.   `tenant_id` BIGINT COMMENT '租户ID,外键',
  112.   `name` VARCHAR(255) NOT NULL COMMENT '权限名称',
  113.   `description` TEXT COMMENT '权限描述',
  114.   `resource_type` VARCHAR(50) COMMENT '资源类型(如 button, menu, column)',
  115.   `resource_name` VARCHAR(255) COMMENT '资源名称',
  116.   `action` VARCHAR(50) COMMENT '允许的操作(如 read, write)',
  117.   `sort_code` INT COMMENT '排序码',
  118.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  119.   `remark` TEXT COMMENT '备注',
  120.   `created_by` BIGINT COMMENT '创建人ID',
  121.   `updated_by` BIGINT COMMENT '更新人ID',
  122.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  123.   `created_date` DATETIME COMMENT '创建时间',
  124.   `updated_date` DATETIME COMMENT '更新时间',
  125.   PRIMARY KEY (`id`),
  126.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
  127. ) COMMENT='权限表,定义系统内的权限和它们的作用范围';
  128. -- 创建组织机构表
  129. CREATE TABLE `ns_org` (
  130.   `id` BIGINT AUTO_INCREMENT,
  131.   `tenant_id` BIGINT COMMENT '租户ID,外键',
  132.   `name` VARCHAR(255) NOT NULL COMMENT '组织名称',
  133.   `description` TEXT COMMENT '组织描述',
  134.   `parent_id` BIGINT COMMENT '父组织ID',
  135.   `sort_code` INT COMMENT '排序码',
  136.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  137.   `remark` TEXT COMMENT '备注',
  138.   `created_by` BIGINT COMMENT '创建人ID',
  139.   `updated_by` BIGINT COMMENT '更新人ID',
  140.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  141.   `created_date` DATETIME COMMENT '创建时间',
  142.   `updated_date` DATETIME COMMENT '更新时间',
  143.   PRIMARY KEY (`id`),
  144.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  145.   FOREIGN KEY (`parent_id`) REFERENCES `ns_org` (`id`)
  146. ) COMMENT='组织机构表,用于管理租户内的组织结构,如部门或团队';
  147. -- 创建菜单表
  148. CREATE TABLE `ns_menu` (
  149.   `id` BIGINT AUTO_INCREMENT,
  150.   `parent_id` BIGINT COMMENT '父菜单ID,用于创建菜单层级',
  151.   `title` VARCHAR(255) NOT NULL COMMENT '菜单标题',
  152.   `path` VARCHAR(255)
  153. COMMENT '菜单对应的路径',
  154.   `icon` VARCHAR(100) COMMENT '菜单项图标',
  155.   `sort_order` INT COMMENT '菜单排序',
  156.   `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  157.   `remark` TEXT COMMENT '备注',
  158.   `created_by` BIGINT COMMENT '创建人ID',
  159.   `updated_by` BIGINT COMMENT '更新人ID',
  160.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  161.   `created_date` DATETIME COMMENT '创建时间',
  162.   `updated_date` DATETIME COMMENT '更新时间',
  163.   PRIMARY KEY (`id`),
  164.   FOREIGN KEY (`parent_id`) REFERENCES `ns_menu` (`id`)
  165. ) COMMENT='菜单表,存储系统菜单项,通常用于构建用户界面的导航系统';
  166. -- 创建角色菜单表
  167. CREATE TABLE `ns_role_menu` (
  168.   `id` BIGINT AUTO_INCREMENT,
  169.   `role_id` BIGINT COMMENT '角色ID',
  170.   `menu_id` BIGINT COMMENT '菜单ID',
  171.   `permission` VARCHAR(50) COMMENT '对该菜单的具体权限(如查看、编辑)',
  172.   `created_by` BIGINT COMMENT '创建人ID',
  173.   `updated_by` BIGINT COMMENT '更新人ID',
  174.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  175.   `created_date` DATETIME COMMENT '创建时间',
  176.   `updated_date` DATETIME COMMENT '更新时间',
  177.   PRIMARY KEY (`id`),
  178.   FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`),
  179.   FOREIGN KEY (`menu_id`) REFERENCES `ns_menu` (`id`)
  180. ) COMMENT='角色菜单表,定义角色和菜单之间的关系,控制不同角色可访问的菜单项';
  181. -- 创建角色机构权限范围表
  182. CREATE TABLE `ns_role_org_permission` (
  183.   `id` BIGINT AUTO_INCREMENT,
  184.   `role_id` BIGINT COMMENT '角色ID',
  185.   `org_id` BIGINT COMMENT '组织机构ID',
  186.   `permission` VARCHAR(50) COMMENT '权限类型(如读、写)',
  187.   `created_by` BIGINT COMMENT '创建人ID',
  188.   `updated_by` BIGINT COMMENT '更新人ID',
  189.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  190.   `created_date` DATETIME COMMENT '创建时间',
  191.   `updated_date` DATETIME COMMENT '更新时间',
  192.   PRIMARY KEY (`id`),
  193.   FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`),
  194.   FOREIGN KEY (`org_id`) REFERENCES `ns_org` (`id`)
  195. ) COMMENT='角色机构权限范围表,定义角色在不同组织结构中的数据访问权限';
  196. -- 创建角色数据列权限表
  197. CREATE TABLE `ns_role_column_permission` (
  198.   `id` BIGINT AUTO_INCREMENT,
  199.   `role_id` BIGINT COMMENT '角色ID',
  200.   `table_name` VARCHAR(255) COMMENT '数据表名称',
  201.   `column_name` VARCHAR(255) COMMENT '列名称',
  202.   `permission_type` VARCHAR(50) COMMENT '权限类型(如读、写)',
  203.   `created_by` BIGINT COMMENT '创建人ID',
  204.   `updated_by` BIGINT COMMENT '更新人ID',
  205.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  206.   `created_date` DATETIME COMMENT '创建时间',
  207.   `updated_date` DATETIME COMMENT '更新时间',
  208.   PRIMARY KEY (`id`),
  209.   FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`)
  210. ) COMMENT='角色数据列权限表,管理角色对不同数据表列的访问权限';
  211. -- 创建支付明细费用表
  212. CREATE TABLE `ns_payment_detail` (
  213.   `id` BIGINT AUTO_INCREMENT,
  214.   `tenant_id` BIGINT COMMENT '租户ID',
  215.   `package_id` BIGINT COMMENT '套餐ID',
  216.   `subscription_id` BIGINT COMMENT '订阅ID,关联`ns_tenant_package_subscription`表',
  217.   `amount` DECIMAL(10, 2) COMMENT '支付金额',
  218.   `payment_method` VARCHAR(255) COMMENT '支付方式(如信用卡、PayPal、转账等)',
  219.   `payment_status` VARCHAR(50) COMMENT '支付状态(如`pending`, `completed`, `failed`)',
  220.   `transaction_id` VARCHAR(255) COMMENT '交易流水号',
  221.   `payment_date` DATETIME COMMENT '支付日期',
  222.   `created_by` BIGINT COMMENT '创建人ID',
  223.   `updated_by` BIGINT COMMENT '更新人ID',
  224.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  225.   `created_date` DATETIME COMMENT '创建时间',
  226.   `updated_date` DATETIME COMMENT '更新时间',
  227.   PRIMARY KEY (`id`),
  228.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  229.   FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`),
  230.   FOREIGN KEY (`subscription_id`) REFERENCES `ns_tenant_package_subscription` (`id`)
  231. ) COMMENT='支付明细费用表,用于记录租户订购套餐时的支付明细';
  232. -- 创建租户套餐订阅表
  233. CREATE TABLE `ns_tenant_package_subscription` (
  234.   `id` BIGINT AUTO_INCREMENT,
  235.   `tenant_id` BIGINT COMMENT '租户ID',
  236.   `package_id` BIGINT COMMENT '套餐ID',
  237.   `subscription_date` DATE COMMENT '订阅日期',
  238.   `expiration_date` DATE COMMENT '到期日期',
  239.   `status` VARCHAR(50) COMMENT '状态(如激活、过期)',
  240.   `created_by` BIGINT COMMENT '创建人ID',
  241.   `updated_by` BIGINT COMMENT '更新人ID',
  242.   `is_deleted` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  243.   `created_date` DATETIME COMMENT '创建时间',
  244.   `updated_date` DATETIME COMMENT '更新时间',
  245.   PRIMARY KEY (`id`),
  246.   FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  247.   FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`)
  248. ) COMMENT='租户套餐订阅表,管理租户订阅套餐的详情';
  249. ```
  250. 在上述设计中:
  251. - `tenant_id`字段为`0`时表示平台级用户和角色。
  252. - 普通租户用户和角色使用具体的`tenant_id`来标识其所属的租户。
  253. 这种设计确保了平台级用户和角色能够被正确识别和管理,不会与任何具体租户的用户和角色混淆。
复制代码
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表