需求很简单,就是为一个功能设计一个权限,一个功能包含的权限一共四个,固定的,不会增加也不会减少,即增加,修改,删除和查询,可以多选。
按照常规的设计,后台的表可以是一个表也可以是两个表,一个表如下左所示,两个表如下右所示:
不管是一个表还是两个表,功能权限可以直接存汉字增删改查,也可以存英文CODE或者存1,2,3,4去表示。这里不考虑那种设计更好,重点是存的权限的值的问题。这种奇葩的设计是采用了一张表的设计,功能权限字段存的值是二进制位。增删改查对应的数字是1,2,4,8,前端就是四个CheckBox支持多选的那种,当客户选择的时候,后端将选择的值转换成二进制位,做相加移位操作,将最后的结过存到表中,当要查询出来输出到页面上时,再将该字段的值做分解,分解出选择的数量以及选择的数值是啥。当时看到这个功能的时候,果断重新写了一下,因为一方面感觉很别扭,另一方面是太高深了,虽然不考虑扩展性,也不至于用移位操作和数的分解操作,之前做这种设计的人应该是个"高手"。