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

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

         设计方案

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

                         2. **数据库字段**:在`ns_user`和`ns_role`表中使用这个特定的租户ID来标识平台级用户和角色。 添加注释以说明特定的租户ID用于平台级用户。 -

 

-- 创建语言表
CREATE TABLE `ns_languages` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `code` VARCHAR(10) NOT NULL COMMENT '语言代码(如 en, zh, fr)',
  `name` VARCHAR(100) NOT NULL COMMENT '语言名称(如 English, 中文, Français)',
  `enabled` BOOLEAN DEFAULT TRUE COMMENT '是否启用',
  `sort_code` INT COMMENT '排序码',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  `remark` TEXT COMMENT '备注'
) ENGINE=InnoDB COMMENT='语言表,存储系统支持的语言列表';

-- 创建翻译表
CREATE TABLE `ns_translations` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `language_id` INT NOT NULL COMMENT '语言ID',
  `translation_key` VARCHAR(255) NOT NULL COMMENT '翻译键',
  `translation_value` TEXT COMMENT '翻译值',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`)
) ENGINE=InnoDB COMMENT='翻译表,存储对应各语言的界面元素的翻译';

-- 创建租户表
CREATE TABLE `ns_tenant` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `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',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  `language_id` INT DEFAULT 1 COMMENT '默认语言ID',
  FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`)
) ENGINE=InnoDB COMMENT='租户表,存储租户基本信息';

-- 创建用户表
CREATE TABLE `ns_user` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL COMMENT '用户名',
  `email` VARCHAR(255) UNIQUE COMMENT '邮箱',
  `password` VARCHAR(255) COMMENT '密码',
  `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
  `language_id` INT DEFAULT 1 COMMENT '默认语言ID',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`language_id`) REFERENCES `ns_languages` (`id`)
) ENGINE=InnoDB COMMENT='用户表,存储租户内用户的信息,平台用户使用特定租户ID';

-- 创建用户角色关系表
CREATE TABLE `ns_user_role` (
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  PRIMARY KEY (`user_id`, `role_id`),
  FOREIGN KEY (`user_id`) REFERENCES `ns_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB COMMENT='用户角色关系表,用于存储用户和角色之间的多对多关系';

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

-- 创建权限表
CREATE TABLE `ns_permission` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `tenant_id` BIGINT NOT NULL 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',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
) ENGINE=InnoDB COMMENT='权限表,定义系统内的权限和它们的作用范围';

-- 创建组织机构表
CREATE TABLE `ns_org` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `tenant_id` BIGINT NOT NULL 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',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`parent_id`) REFERENCES `ns_org` (`id`)
) ENGINE=InnoDB COMMENT='组织机构表,用于管理租户内的组织结构,如部门或团队';

-- 创建菜单表
CREATE TABLE `ns_menu` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
  `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',
  `modified_by` BIGINT

 COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`),
  FOREIGN KEY (`parent_id`) REFERENCES `ns_menu` (`id`)
) ENGINE=InnoDB COMMENT='菜单表,存储系统菜单项,通常用于构建用户界面的导航系统';

-- 创建套餐表
CREATE TABLE `ns_package` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `tenant_id` BIGINT NOT NULL COMMENT '租户ID',
  `name` VARCHAR(255) NOT NULL COMMENT '套餐名称',
  `description` TEXT COMMENT '套餐描述',
  `price` DECIMAL(10, 2) COMMENT '价格',
  `duration` INT COMMENT '持续时间(天)',
  `user_limit` INT COMMENT '用户人数限制',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`tenant_id`) REFERENCES `ns_tenant` (`id`)
) ENGINE=InnoDB COMMENT='套餐表,描述各种套餐的详细信息';

-- 创建套餐权限表
CREATE TABLE `ns_package_permission` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `permission_id` BIGINT NOT NULL COMMENT '权限ID',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`),
  FOREIGN KEY (`permission_id`) REFERENCES `ns_permission` (`id`)
) ENGINE=InnoDB COMMENT='套餐权限表,定义套餐与权限之间的关系,管理套餐所包含的权限';

-- 创建角色套餐关系表
CREATE TABLE `ns_role_package` (
  `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  `package_id` BIGINT NOT NULL COMMENT '套餐ID',
  `sort_code` INT COMMENT '排序码',
  `enabled` INT DEFAULT 1 COMMENT '状态 (0 禁用, 1 启用)',
  `remark` TEXT COMMENT '备注',
  `created_by` BIGINT COMMENT '创建人ID',
  `modified_by` BIGINT COMMENT '修改人ID',
  `delete_flag` BOOLEAN DEFAULT FALSE COMMENT '是否删除',
  `created_date` DATETIME COMMENT '创建时间',
  `modified_date` DATETIME COMMENT '修改时间',
  FOREIGN KEY (`role_id`) REFERENCES `ns_role` (`id`),
  FOREIGN KEY (`package_id`) REFERENCES `ns_package` (`id`)
) ENGINE=InnoDB COMMENT='角色套餐关系表,管理角色与套餐之间的关系';
 

  

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月06日 0

暂无评论

推荐阅读
zgZ2jKp1GuJ2