什么是数据隔离?简单的说就是我们的数据都在数据库里,我们只能调取某些相关的数据,而无法调取,或者说没有权限其他不相关的数据。做到一个隔离效果,这就是数据隔离。
首先,我们的数据都是存储在数据库中的数据表中的,不同公司的人员信息都会存储在同一个表中。这个肯定是存储在一起的,不然每个公司都独立一张表,那不难维护死了。
当我们进行操作数据的操作时,理论上我们可以查询到所有公司的信息。但是对于A公司而言,它理论上只能操作A公司的信息,不能操作B公司的数据。
由于我们的人员都是属于某某公司的,所以我们可以在登录的时候记录一下登录的账户是哪个公司的。我们使用一个临时的数据库去记录一下小杜的一些信息,等下还要用的。(图中把数据临时存放在黄色的数据中)
等到这个用户要操作公司的信息的时候,我们把之前临时存取的数据取出来,然后我们就知道这个用户的公司信息,我们只要比对这个用户要操作的数据是不是本公司的就行了。
可以理解为之前那个登录进来的小杜,因为已经登录过了,所以执行操作数据的时候无需再传入账号密码来校验身份了,服务器是有一些技术是可以识别这用户是否是已经登录过的用户的!
当然公司还有分公司和母公司这些概念了,分公司能不能调度总公司的数据,总公司能不能调度分公司的数据,这些的话根据实际企业技术要求,进行适当的条件判断即可。
刚刚我们可以通过临时存储公司信息的方式,在我们操作数据的时候进行条件判断,就可以做到A公司不能操作B公司,B公司不能操作A公司的需求了。
但是即便是同一个公司,也存在部门划分,什么意思呢?比如说,我们公司有技术部,产品部,人事部,市场部等等。每个部门都有一个负责人,部门负责人可以查看他的下属的一些信息,但是看不了其他部门的信息。
但是人事部和一些领导除外,他们有资格查看所有人员的信息。还有一点是,比如技术部负责人可以看到下属的一些信息,但是却无法修改,比如薪资。老大觉得你表现不错,想给你加薪,但是他不能直接給你数据库改信息,应该写一份申请给人事部,人事部负责修改薪资。
所以我们要进行操作一个部门的一些数据的时候,我们会进行一个条件判断,当然公司这种肯定一样的,这个上面已经说过了。然后我们判断一下部门信息,是否是人事部,领导,如果是的话我们就有权利去跨部门的操作数据。否则必须得判断一下是否是同一个部门的,如果不是同一个部门,则无权限访问。
如图,我们模拟了几个职位,其中章总和小朱都可以调度人员信息,当然人事部只是一个部门,职位才是具体干什么的。当然我们每个部门都应该有个部门负责人的,或者叫人事总管。
对于非人事部门的总管也只是一些只读的权限,甚至还有些信息也是隐藏的。比如工作年限,简历上写过会什么什么技术,上面几家工作过的单位干过哪些职位,任期多长时间这些信息是可以看的。但是身份证什么信息又不让看了。
公司级别比较简单,每个公司都只能操作自己公司的数据。对于部门级别的数据隔离,相对而言就显的有些复杂了,应该涉及实际业务场景,不同部门之前有比较复杂的权利关系。
人员级别是基于部门级别的,只不过更加细粒化了!我们的部门之前存在一些数据的隔离,即部门之间的数据不是完全透明的,人员信息也一样。对于用户的一些隐秘的信息,这些公司应该留档,但是不能随意的调度。比如员工入职的时候会填写非常详细的用户资料,比如身份证,住址等等。这些信息应该保存进数据库,但是不能随意的泄露,这些属于员工的隐私。比如我们设置公司的负责人才有权限去调度这些信息。
对于人员管理,涉及到细节更多,和业务息息相关,所以这里就不展开将了,解决方案和部门级别差不多。
我们看到数据隔离是一个非常重要的技术,我们上面的图中也透露了一些解决,就是比对公司是否一致了。
部门的话,也无非是多一层判断罢了。
领导或者人事登录系统,则可以跨部门查操作数据。
当然我们通过这种方式,需要我们提供以下数据:
信息 | 描述 |
---|---|
公司Id | 用于判断是否是同一个公司 |
部门Id | 用于判断是否是用一个部门 |
职位Id | 用于判断是某某部门的什么职位 |
员工Id | 用于判断是那些人员 |
我领入几个场景,方便大家理解。(x表示不需要,√表示需要)
场景 | 相同公司 | 相同部门 | 某个人员 |
---|---|---|---|
公司的公开注册信息 | × | ||
公司的内部管理制度表 | √ | ||
公司的技术部技术文档 | √ | √ | |
公司的人事信息 | √ | ? | × |
公司的员工隐私信息 | √ | – | √ |
公司公开注册信息:比如是否上市,投资人,公司规模,注册资金等等信息这些不是同一公司也能访问
某公司的规章制度:这些只有本公司的人员才可以看到,所以需要是本公司才能看到
技术部门的技术文档:这些技术的东西只有技术人员直接才能查看,需要都是技术部门的。
人事信息:这些是否需要相同部门我打了一个问号,指的是人事部和领导的特殊性。
员工的隐私:这些应该不是某某部门就能看到,而是几个特殊的人员才有的权限,比如员工本人,和公司负责人等等。
以上的几个信息都可以通过用户登录时去数据库比对账号密码的同时,顺道一并查询出来,然后该用户操作数据时,根据具体的业务需求我们再看看需要比对哪些信息,是否需要是同个公司,是否需要是同个部门等等。。。
以上就是数据隔离的一些思路了,关于具体的技术实现,我放在下一篇技术文档。