通常做一个完整的内容展示系统,都需要一个后台取管理。某些后台涉及到多用户的还需要不同权限,需要一个权限管理的功能。
在做过几个项目后,我想针对vue框架,总结和延伸讨论一下后台权限管理的方案。
方案会包含以下几个方面:
1 数据表的设计
2 前端界面的控制
此篇先讨论数据表的设计
一.权限的分类
通常来说,系统权限分为四大类:
![](https://img.haomeiwen.com/i4581697/554e5898b82d6571.png)
其实这几种权限有层级关系,一级比一级更具体。
1.菜单权限:在操作界面上,是否显示某个菜单。限制的对象是菜单,本质上它是对一类数据的操作权限。例如,系统设置菜单项只有系统管理员能看见,其它用户没有这一菜单项。
2.操作权限:限制的对象是数据实体的增删改查等功能。例如,某些用户只能查看单据不能修改。
3.字段权限:限制的对象是某数据实体的某字段。例如,金额字段查看只开放给个别用户。
4.数据权限:限制数据内容。例如只允许查看操作员为“张三”开的单据,或者只能查看自己开的单据。
理清它们的关系后,我们来讨论数据表的设计:
二.数据表设计
首先需要一个数据表记录角色,这张表比较简单。
![](https://img.haomeiwen.com/i4581697/d01c665faa529f04.png)
权限需要查看和设置,为了方便,四类权限可以用一张表搞定。
![](https://img.haomeiwen.com/i4581697/7f67968bd77bb5c3.png)
并不是每种权限都用到所有字段,
当Type为0菜单权限时,Id,Name,Code,Type有效;
当Type为1操作权限时,Id,Name,Code,Table_Id,Type有效;
当Type为2字段权限时,Id,Name,Code,Column_Id,Type有效;
当Type为3数据权限时,Id,Name,Code,Column_Id,Type有效;
其中Table_Id,Column_Id分别引申出两张表,当设置操作,字段,数据时,需要选择这些数据表和字段。
![](https://img.haomeiwen.com/i4581697/bcebe4e3d356e044.png)
![](https://img.haomeiwen.com/i4581697/2e23df2b4e41dc7a.png)
具体权限的记录,需要关联角色和权限项目
![](https://img.haomeiwen.com/i4581697/dc264ee88fc40862.png)
同理,对于每类权限,并不是都用到所有字段
Data字段只当权限的Type=3即数据权限时有效
Auth字段当不同权限类别时,代表的意义不同,如菜单权限可定义0不显示,1显示;
操作权限可定义0增1删2改3查;字段权限0不显示,1显示;
数据权限可不设置
表关系图大致如下
![](https://img.haomeiwen.com/i4581697/071233a7ae7615e5.png)
这只是初步的设计,具体在使用时纷繁复杂,依系统需求改动表的结构时很正常的。
后台在读写数据表十分重要,但也较复杂,这里就不讨论了。
另外如果只是简单的权限系统,可能用不到数据权限和字段权限。那么可以把表简化一下:
![](https://img.haomeiwen.com/i4581697/0377f52462da26e5.png)
你可能会发现,它连权限项目表的Type也没有了,其实它是把菜单权限和操作权限合在一起了:
权限项目表Auth_Code2中一行记录就是一个菜单,一个菜单就默认是一个数据实体。
什么意思呢?就是当我规定权限是可编辑时,这菜单下的所有数据都可编辑,这固然不够细化,但如果能满足需求,也未尝不可。
权限明细表Auth_Detail2中,Auth字段记录的权限定义也改变了,它同时定义了菜单权限和操作权限:
0 菜单不可见,操作不允许
1 菜单可见,可查询,新增
2 菜单可见,可查询,删除
3 菜单可见,可查询,修改
4菜单可见,可查询
因为简化一些,前端处理会更简单,讨论起来更有重点,以下前端用vue处理也会以这个模型为基础。
网友评论