数据库分库后,业务库无法读取到数据权限,接口权限数据

Blade 已结 4 6569
星辰
星辰 剑圣 2020-03-20 10:25

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

  1. 参考了https://sns.bladex.cn/q-591.html的回答,但是奈何没有技术,不知道如何重写,还请大佬指点一下

    QQ图片20200320102656.jpg



4条回答
  •  admin
    admin (最佳回答者)
    2020-03-20 16:35

    一、如果需要快速生效,无需改造,可以看如下步骤:

     1. 如果用的boot版本,需要复制拷贝一份BladeScopeModelHandler,比如命名为BladeScopeModelHandlerMaster,拷贝到boot工程一个用于生效配置类的包。然后在类上加上DS("master")的注解。同时再到config类初始化,这样逻辑就会走自定义的这个数据权限查询类,也就只会锁定到master库来查询了。

    @DS("master")
    @RequiredArgsConstructor
    public class BladeScopeModelHandlerMaster implements ScopeModelHandler {
    ......
    }
    @Configuration(proxyBeanMethods = false)
    public class BladeScopeConfiguration {
        @Bean
        public ScopeModelHandler scopeModelHandler() {
           return new BladeScopeModelHandlerMaster(jdbcTemplate);
        }
    }



    二、如果需要深度改造,可以多拓展几个类,参考cloud的做法,具体可以看如下步骤: 

    1. 把这些拷贝到Boot工程,单独一个包

    image.png


    2. 将这两个cache类里面操作数据库的feign方法,改为基于mybatis-plus的service,然后给对应service加上Ds注解指定master数据源就可以了

    image.png


    3. 最后确保这两个handler正常初始化为bean,这样底层就会走自定义的handler逻辑,自定义handler也会走自定义的cache,自定义cache内部的数据库查询也就会走定义的master数据源了

    image.png


    0 讨论(1)
  • 2022-09-17 18:17

    上面的 方法太笨了,有更好的方法,

    1. 将bladex-tool中的BladeScopeModelHandler.java复制到boot工程里加上@Master就可以了,它会自动覆盖的,如下图:

      image.png

    7 讨论(2)
  • 2020-03-21 23:33

    我记得 那个时候 我用的boot版  是直接吧 数据权限这个功能去掉了 用不着...

    0 讨论(0)
  • 2022-04-26 21:12

    具体怎么改呢?

    0 讨论(0)
提交回复