前后端分离模式下,所有的交互场景都变成了数据,传统业务系统中的权限控制方案在前端已经不再适用,因此引发了我对权限的重新思考与设计。
权限控制到底控制的是什么?
在理解权限控制之前,需要明白两个概念:资源和权限。什么是资源,对于一个系统来说,系统内部的所有信息都可以理解为这个系统的资源。页面是资源、数据是资源、按钮是资源、图片是资源、甚至页面上一条分割线也可理解为是这个系统的资源。而权限就是访问某个资源所需要的标识。无论系统的权限如何设计,在用户登录时,都可以计算得出用户所拥有的权限标识集合,也就确定了该用户能访问哪些系统资源,这就是我理解的权限控制的本质。于是我们可以得出:权限控制是控制登录用户对于系统资源的访问。
前后端分离模式下,前后端在权限控制中各自的职责是什么?
在弄清前后端在权限控制中各自的职责是什么之前,需要理解前后端各自在系统中的职责。这个还是很好理解:
服务端:提供数据接口。
前端:路由控制、页面渲染。
由于前端负责与用户交互,用户所能操作的资源入口都是由前端进行控制,那么前端的权限控制就包括:
前端路由的权限控制,过滤非法请求,用户只能访问权限范围内的页面资源。
页面内组件的权限控制,根据用户的权限控制页面组件的渲染。包括各种按钮、表格、分割线等。
随着前端组件化的快速发展,用户所看到的一切均可理解为组件,页面是个大组件,其内部由各个小组件拼凑而来,那么前端权限控制最终落地到对组件的权限控制。于是脑补了出了最优雅的权限组件使用方式:
<组件 permissionName='xxx' />