blade商业版 blade-starter-mybatis工程,resolveEntity函数关于多租户处理逻辑的困惑

Blade 未结 1 284
keith2008
keith2008 剑童 2024-04-30 16:40

一、该问题的重现步骤是什么?

(entity) {
       BladeUser user = AuthUtil.()Date now = DateUtil.()(entity.getId() == ) {
          (user != ) {
             entity.setCreateUser(user.getUserId())entity.setCreateDept(Func.(user.getDeptId()))entity.setUpdateUser(user.getUserId())}
          (entity.getStatus() == ) {
             entity.setStatus(BladeConstant.)}
          entity.setCreateTime(now)} (user != ) {
          entity.setUpdateUser(user.getUserId())}
       entity.setUpdateTime(now)entity.setIsDeleted(BladeConstant.)Field field = ReflectUtil.(entity.getClass()BladeConstant.)(ObjectUtil.(field)) {
          Method getTenantId = ClassUtil.(entity.getClass()BladeConstant.)String tenantId = String.(getTenantId.invoke(entity))(ObjectUtil.(tenantId)) {
             Method setTenantId = ClassUtil.(entity.getClass()BladeConstant.String.)setTenantId.invoke(entity(Object) )}
       }
    }

}
----------上面代码中,注释“处理多租户逻辑,若字段值为空,则不进行操作”
但是看代码的意思是:判断实体类中有无tenantId字段,如果有这个字段但是没有值的话,就把值置为空。
请问这样的处理有什么意义,感觉是做了多余的事情?

二、你期待的结果是什么?实际看到的又是什么?

我觉得应该是

实体类中有tenantId字段,但是这个字段但是没有值的话,应该去设置这个字段的值才对。

三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 2024-04-30 18:14

    如果开启租户增强模式,是可以跳过token手动设置租户id的。

    但是开放了手动设置那么就会有各种情况出现,这种情况就是用来避免用户的各种获取租户id逻辑导致的问题。

    因为用户自己写的逻辑我们是无法控制的,自定义一个getTenatId()方法后,如果出现错误了,返回了空字符串,设置到后台,tenantId就变成了“”,那必然会报错。

    所以这种情况下我们针对“”的值,默认设置为null,那么如果是null,到底层就会调用租户插件,从token获取租户id而不会报错。

    0 讨论(0)
提交回复