前言
哈喽你好呀,我是 嘟老板,今天我们来聊聊几乎所有企业系统都离不开的 权限管理,大家平时在做项目开发的时候,有没有留意过权限这块的设计呢?都是怎样实现的呢?如果现在脑子里对于这块儿不够清晰,那么,请跟我一起,来了解下企业系统常用的权限管理策略 - RBAC
模型。
介绍
为什么需要权限管理
要弄清楚这个问题,我们先来看看什么是权限?个人认为,权限就是一系列用户可用的系统资源的整合,可以大致分为以下三类:
- 菜单权限:用户使用的菜单、查看的页面等。
- 操作权限:系统页面中的交互功能按钮,如编辑,删除,新增等。
- 数据权限:用户在页面中查看的数据内容,业务系统数据一般存在机密性,不同身份的用户查看的数据范围也有所不同。
了解了权限,那么 权限管理 也就比较清晰了,其实就是对系统用户访问资源的管理。根据业务要求的不同,用户看到的菜单、使用的功能、查看的数据都有所不同。
那么为什么要控制访问权限呢?因为不同的用户所负责的业务范围是不同的,比如管理者可以看到所有下属的信息,但是普通只能看到自己的;比如行政可以看到所有人的打卡记录,而普通员工只能看自己的;比如财务可以看到所有人的工资,而普通员工只能看到自己的…等等等等,
这都离不开 权限管理,通过为系统用户分配不同的权限,以达到精准控制的目的。
什么是 RBAC
模型
RBAC(Role-Based Access Control)
即:基于角色的权限控制。
基础设计如下:
在整个流程中,将 菜单、操作、组织 等系统资源统一由权限管理,再通过角色关联用户,角色关联权限的方式间接赋予用户权限。
那么,为什么需要角色这一节点呢,直接将权限分配给用户不是也可以实现吗?
当然可以,但是试想一下,如果为每个用户直接分配权限,首先权限配置就是一个比较大的工作量。而且,如果某一类用户的权限发生变更,就需要再次为每个人都变更权限配置,可见其扩展性和维护性方面就弱了不少,只能适用于用户数量,权限分类较少的平台。
而有了角色这一节点,就可以为不同的角色分配不同的权限,用户只需要关联指定的角色,不需要为一一分配繁琐的权限。而且角色权限变更后,也只需要更新某一角色的权限配置,无需对每个用户进行调整。
实现
设计思路
清楚了什么是权限管理,接下来我们就来思考一下如何设计一套基础的权限系统,假设我们目前只需要管理菜单权限。
如图所示,我们至少需要如下管理模块:
- 用户管理
- 菜单管理
- 权限管理
- 角色管理
其中,用户管理 和 菜单管理 负责基础信息维护,权限管理 是一系列 菜单资源 的集合,角色管理 是一系列 权限 的集合,可分配给指定用户。
从实际开发点来说,除了基础的 增删改查 之外,用户管理 需要 分配角色 功能,来为用户分配指定的一个或多个角色;权限管理 需要 分配菜单 功能,来为每个权限调整指定的菜单资源;角色管理 需要 分配权限 功能,来为每个角色分配一个或多个权限。
整个实现过程可大致分成三个部分:
- 实现前端管理模块
- 设计表结构,实现后端查询逻辑
- 前端路由管控,对标权限数据