权限在各种业务应该是很常见的了,资料也有很多,但对于使用者来说,为了避坑,还是需要先了解下。
先看看权限设计的万能思路:
设计原理遵循三原则:who、what、how,这个就不多说了。
最近在使用一个开源的项目,其数据权限模块设计全面,挺好用的,有两个亮点值得学习:
-
1.上下级之间使用一张表,比如用户表,如果用户之间也分上下级,不要分表,只要是用户,都用一张表,加parent_id字段标识即可。当然如果用户还跟部门、公司联系,那部门也是新的数据,需要另加新表,而部门本身的上下级也是在一张表内,灵活性比两张表要好。
-
2.这是最牛的一点,我还从未见过这种操作,看上图的设计,最后一个数据操作。什么是权限,就是对数据的控制,数据怎么控制的,一般通过增删查改操作的,也就是页面上常见的按钮、链接、搜索框。所以这张操作表,是一种对数据的粒度控制(操作表这里严格还区分操作类型表、操作行为表,比如操作类型“状态”,操作行为就可以用“0”,“1”,“2”…代表各种状态,想细致到哪个地步就细致到哪个地步)。而数据操作表,如何把数据和操作结合,这点是最厉害的,直接用sql语句拆段存储进数据库,很好做到数据的控制!看下图:
仔细一想也是这个道理,对数据的控制最终会转为在数据库对数据的控制,把sql控制存住数据库表的字段里面,前端页面就可以自由配置,理论上无限上下级,无限细致,无限自动!
第一次见到这种操作,学到了。