在上一篇文章中我阐述了常见系统设计的两种设计方案,一种是用户—角色的设计模式,另外一种是用户—职位—角色的设计模式。大体上说了下数据权限是通过组织架构进行控制的问题,并没有详细的进行阐述数据权限具体该怎么取值。
在很多的系统中,权限的控制代码都进行了封装。一般的程序员是很难看到具体逻辑的,鉴于此,我将对此进行详细说明,希望可以帮助到想了解底层原理逻辑的产品和开发。
数据的控制,分为通用数据权限和特殊数据权限。
通用数据数据权限指的是通过组织架构来设计的权限,特殊权限指的是可以通过职位和角色或者其他的条件进行处理的权限设计。
怎么进行通用数据权限的设计?
简单的来说,可以把组织架构看成一棵树,数据相当于树上的果子。在进行数据存储时,每张表都包含字段职位。由于职位是与组织部门进行关联的,这样就把数据(果子)挂到了组织架构(果树)上了。比如说:不同人所产生的考勤数据,考勤数据在存储时会挂到其组织部门下面,也就是树的某一枝丫下面。
在取数据的时候,当用户登录系统账号的时候,账号关联职位,职位关联部门,找到其所属的部门,就可以取到其下的数据。换句话说,找到其所属的大树的枝丫,就可以拿到其下所结的果子。
一言以蔽之:怎么存数据,就怎么反着取数据。
怎么进行特殊数据权限的设计?
我主要说下用角色和组织类型做特殊的权限控制。为什么要做特殊的数据权限控制呢?因为通用数据权限,只能满足一般的数据控制。比如:是A树枝的一个点,我不但想要取到A树枝下所有的果子,而且想取C树枝下的果子,一般的通用数据设计方式就无法满足。
用角色做数据权限
比如:我想要具有相同角色的人所看的数据是一样的,而这两个角色是属于不同的部门,那么我们该怎么处理呢?只需要我们存储数据的的时候,同样是把数据存储在职位上,职位关联角色,通过外挂表的方式,在取数据的时候,我们反着找就可以了。
除此之外,可以通过组织类型来做特殊权限控制,基本上都要通过外挂表的形式。
综上:数据权限的设计,考虑清楚如何存,就知道了怎么取。
网友评论