首先需要在配置文件中配置相关的信息,具体参考 【配置文件(特性配置)】 中的【用户自定义数据权限】

多数据源和单数据源是一样的,仅仅是数据源数量的不同,这里我们仅以单数据源为例。

首先在我们需要连接的数据源内,需要有业务id和云蛛系统用户id对应的表,不管是业务id和部门还是个人对应,最终落到数据表中都是业务id和云蛛系统的个人id一一对应,如下:

其中云yunzhu_userid这个是云蛛系统中的用户id,business_id则是该数据源中的业务id,即哪些用户可以有哪些业务数据的标识。

之后就是具体的数据表又或者view

这是一张具体的业务数据表,主要由name和value构成,而belong_id 则是我们上张表中的business_id,用于标识哪些数据属于哪些业务

这样用户和数据之间的关系就被关联了起来。而针对业务数据表中的belong_id 这个具体怎么设计这个是您来设计的,可以是上述说的一个int值,也可以是varchar值,诸如1,2,3,4这种格式的,都是可以的,因为这个业务数据值,是您自己设计又或者写SQL实现的。

那么具体逻辑是怎么实现的呢?

第一步:我们需要在配置文件中配置具体的信息。如下(此处只罗列关键信息):

jdbc.usermapping.user.yunzhu.column=yunzhu_userid

jdbc.usermapping.user.business.column=business_id

jdbc.usermapping.sql.business.alias=cobwebtimes_belong_id

jdbc.usermapping.sql=select yunzhu_userid,business_id from user_mapping

第二步:我们在我们的组件内配置相关需要数据源权限的SQL,比如:

select name,value

from table

where belong_id = cobwebtimes_belong_id

请一定注意,系统会自动甄别是否有 jdbc.usermapping.sql.business.alias 所设置的关键字如果有关键字,就会知道您启用了数据源权限。

第三步:系统如何运行?

系统组件得知自己要做数据源权限的时候,会取得云蛛系统自己的userid(该userid来自云蛛系统数据库的user_表中的userid字段),然后其会在用户数据源侧执行 jdbc.usermapping.sql 中所设定的SQL,userid会作为where条件传入,会以 jdbc.usermapping.user.yunzhu.column 中所设定的作为字段名称传入,同时会抽取 jdbc.usermapping.user.business.column 中的设定的字段作为业务id。

抽取出来的业务id,会在第二步中替换 jdbc.usermapping.sql.business.alias 所设置关键字 cobwebtimes_belong_id,从而完成数据权限

第四步:如何设计?

这种数据权限的设计只需要设置,云蛛系统和您业务系统中的mapping关系,然后抽取这种mapping关系,进入实际表中抽取数据。具体的设计模式并不局限于上述这种简单模式,此处只是介绍最最简单的实现模式,已经工作模式。您可以参照这种模式,设计出适合自己的数据权限表结构。