网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

商城中多租户功能逻辑设计-创新互联

一、什么是多租户功能?

多租户功能是基于租户共享同一个数据库、同一个表,但在表中通过tenant_id区分租户的数据的模式,基于mybatis-plus的多租户SQL解析器实现

专注于为中小企业提供网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业潮安免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
`tenant_id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '所属租户',
二、租户功能说明
  • 一个租户就是一个商城
    一个商城下可以有app、小程序、h5等多个展示端,同一租户下的不同端查出的数据是相同的
  • 各租户的数据相互隔离
    有租户约束的情况下,各租户的数据相互隔离,用户只能管理自己所属租户的数据,系统默认的admin账号属于租户1,所以admin只能管理租户1的数据(比如用户管理、角色管理等),没有租户信息约束的表除外
  • 自动维护租户ID
    不需要手动处理,即可实现通过租户ID 过滤的效果
  • 表中添加 tenant_id 字段
  • 在nacos相应服务的配置文件中维护这张表即可
    (例如以下微信模块的配置文件:weixin-admin-dev.yml,其他模块同理)
#租户表维护
base:
  tenant:
    column: tenant_id
    tables:
      - wx_app
      - wx_menu
      - wx_user
      - wx_auto_reply
      - wx_msg
      - wx_mass_msg
三、租户管理怎么做?
说明内容
后台租户ID自动维护通过TenantContextHolderFilter拦截器,获取到token在redis中的租户ID 放到theadlocal 中
前端api租户ID自动维护通过ThirdSessionInterceptor拦截器,获取到thirdSession在redis中的租户ID 放到theadlocal 中
获取当前租户TenantContextHolder.getTenantId
强制切换租户TenantContextHolder.setTenantId 注:在增删改过程中请勿对 tenant_id字段手动赋值,不然报错
租户表维护机构表sys_organ中parent_id为0的机构默认为一个租户
四、其他知识点补充 (1)无租户ID场景

不需要租户信息约束的方法,在mapper的方法上添加注解@InterceptorIgnore(tenantLine=“true”)
加上这个注解后mybatisPlus就不会在这个sql自动维护租户ID了

@InterceptorIgnore(tenantLine="true")
SysUser getByNoTenant(SysUser sysUser);

有些没有token或thirdSession但又需要租户的场景,比如订单支付回调是不会有token和thirdSession的,所以系统不会自动维护;此时我们可以先通过回调传过来的appId,去做无租户约束的查询获取到租户ID,再手动维护进去TenantContextHolder.setTenantId

(2)如何新增租户?

在后台【平台管理】-【租户管理】中新建租户,并配置租户管理员账号
在这里插入图片描述

  • 【租户管理】中给租户管理员角色赋予相应权限
  • 再用刚新增的租户管理员账号登录后台即可
  • 租户和机构是同一个表(sys_organ),父级(parent_id)为0的机构就是一个租户,也是当前机构的最顶级
(3)平台用户管理指定租户

新增租户后,可以将租户分配给指定的平台用户,平台用户就可以在后台左上角通过切换租户来管理所配的租户了
【平台管理】-【平台系统权限】-【平台用户管理】编辑平台用户分配租户
在这里插入图片描述
在这里插入图片描述

(4)Mybatis Plus中的TenantLineInnerInterceptor

@InterceptorIgnore(tenantLine=“true”)
SysUser getByNoTenant(SysUser sysUser);

如果对mybatis-plus不了解,请先看官方文档:https://mybatis.plus/guide/interceptor-tenant-line.html

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:商城中多租户功能逻辑设计-创新互联
网站网址:http://bjjierui.cn/article/dipedi.html

其他资讯