1. 谈一谈权限设计方案
权限设计方案一直是后台管理平台绕不开的一座山,我们必须从搭建这个系统的伊始,就来着手如何啃下这个硬骨头。
当然市面上有很多已经开源的项目,权限的设计方案也各有不同,针对不同场景的都有一定的应用。
有的适用于小型不复杂的后台管理,比如一个小公司,确定的几个角色,我们就可以使用前端来控制权限的设计方案,快速帮我们搭建起来一个公司的系统。
当我们的业务比较复杂,角色也相应的复杂起来,此时我们再用上述的权限方案,已经不能满足我们的需求,我们就需要把权限控制的大权移交给后台去做,我们只需要通过后台返回的权限路由数据去匹配前端的路由表来实现权限控制。
当然这也只是明面上的页面级别的权限控制,只能控制前端页面是否显示,细化一点,我们这里就得处理按钮级别的权限控制了。
按钮级别的权限控制,其实也不复杂,比较常用的做法就是,封装成一个指令,我们通过指令绑定权限码实现按钮的显示和隐藏,从而达到每个用户登入系统,可以看到操作的按钮都是不一样的。
这里提到的页面的权限也好,按钮的权限也好,都是通过前端控制页面和按钮是否显示,不够安全,因此我们的后台需要通过 Token
二次校验当前用户是否拥有该操作权限。
这就好比我们实现一个提交表单的功能,前端要验证字段的合法性,后端也要二次验证请求的参数是否合法,这样做才能保证我们做的权限方案是安全的。
以上提到的都可以归纳为一种类型:访问权限也叫操作权限
真实的场景中,要求我们还要处理一种类型的权限,那就是数据权限。
实现数据权限控制,需要后台处理,当前登入用户拥有哪些数据的支配权,更加细化了当前用户的拥有的操作空间。
2. 思路的落地方案
思路落地到项目中去,采用的是路由菜单数据放到前端本地去维护,后端维护与其匹配的路由权限数据,其中包括菜单的,以及按钮的。
示例图如下:
菜单分类为:模块、页面、按钮。其中模块和页面绑定的都是前端本地维护路由表中路由的name字段,要与其相对应,
通过分配权限菜单后,通过 name
字段来匹配当前登录账号所拥有的菜单访问权限。
示例图如下:
这样后端需要维护的权限菜单数据字段就比较少了,菜单名称,权限值,菜单类型,也可增加是否缓存,是否展示等字段。
目前我们公司系统采用的是,前端的路由表放到后端数据库里面去维护,由后台统一返回数据,前端再映射为前端本地路由表,每次添加新页面都需要先配置,才能开发,导致前端开发比较繁琐。现在这样后台只维护权限菜单,也简化了前端在开发时的工作量。
3. 系统集成实现效果
预览效果:www.flowertip.site/admin/
个人知识库:www.flowertip.site/vitepress-b…
驾驶舱页面
菜单管理页面
角色管理页面
用户管理页面