web系统权限设计
权限管理模型
为了实现权限管理模块,我们使用目前比较普遍的RBAC模型(Role-Based Access Control)。
RBAC模型
在RBAC中用户通过角色与权限相关联,用户通过成为适当角色的成员而得到这些角色的权限。构造成"用户-角色-权限"的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

RBAC支持公认的安全原则:最小特权原则、责任分离原则和数据抽象原则。
-
最小特权原则:通过限制分配给角色权限的多少和大小来实现,分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要即可。
-
责任分离原则:在完成敏感任务过程中通过分配两个责任上互相约束的两个角色来实现。例如在清查账目时,需要设置财务管理员和会计两个角色同时参与。
-
数据抽象原则:将权限的设计从表的CRUD操作抽象到根据系统实际业务需要进行划分。如将财务的权限抽象为借款、存款等权限。
表结构
- 根据RBAC的模型扩展表结构的设计图如下:

-
角色可以理解为权限的集合,集合要满足最小特权原则,分配的权限仅需满足当前角色所需要的完成的任务即可。 要给某个用户授予某些权限,不需要直接将权限授予用户,而是将权限授予某种类型的角色,然后让用户成为某个角色。
-
当用户数量比较庞大时,逐一让用户成为某些角色的操作过于繁琐。所以通过给用户组赋予多个角色,然后让用户成为某个用户组的成员来完成批量的用户授权。
-
最终用户的所有权限,就是用户组拥有的角色的权限和用户自己拥有的角色的权限之和。
-
权限中的菜单决定当前用户所能看到的菜单列表,页面元素决定能看到的按钮等操作元素,功能操作决定着用户所能使用的具体功能,能调用的接口。
实现思路
-
用户登陆后,后端根据用户的权限返回用户可见的菜单及页面元素列表,前端根据列表生成可访问页面。
所见即所得,用户能够看到的菜单页或按钮,就是用户有权操作的数据和功能。这种方式实现前端完全依托于后端返回的数据,后期前端维护成本较低。 -
后端方面将所有的需要权限控制的功能(api接口)存入数据中的功能操作表,每次调用接口时判断当前用户是否有权限调用当前接口(防止绕过前端路由控制,访问没权限看到的页面或是调用没权限使用的功能)

浙公网安备 33010602011771号