一、前言
在后台管理系统中,权限管理是很重要的一部分。一般权限管理分为两大类:
1.接口访问权限控制
2.页面访问权限控制
菜单中的页面能否被访问
页面中的按钮的权限
今天先来看页面访问权限的控制
二、页面访问权限的控制
首先页面访问权限,可以分为两种:
1.菜单栏展示全部菜单,没有权限的菜单点击时提示没有权限
2.菜单栏只展示用户能访问的菜单,通过 URL 强行进入页面时,进入的是 404
比较倾向于第二种,一眼就让用户知道自己有哪些权限
大致流程如下:
登录的时候,获取权限菜单———>存储到 session———->渲染
1.肯定是要搭建 vue 项目,封装 axios ,就不说了,可以参考之前写的文章,Vue项目搭建
2.我们可以先获取权限信息,再继续其他操作
1 | import { login, getAside } from '@/api/user-api' |
我这里把接口请求封装之后,做了个 api 层和 service 层,api 层管理接口请求,service 层管理数据,这样 view 层拿到数据直接渲染就可以,不需要在 view 里过多的去处理数据。
这里其实就是调用登录接口,成功之后,调用获取权限信息的接口,把拿到的数据存储到 session 中。
3.接下来要创建路由表了,需要把权限页面和登录页、404 等页面分开
1 | import Vue from 'vue' |
接下来,我们利用返回数据匹配之前写的路由表,将匹配结果和静态路由表结合,开成最终的实际路由表。在这里我写了个权限文件,在 main.js 中引入就可以了。
以下是权限文件的代码 permission.js 文件
1 | import { router, routerMap } from '../routers/router' |
到此,页面的权限控制已经完成了。
三、按钮权限控制
按钮权限控制,我是写了个方法放到了 utils.js 中,直接上代码
1 | // Get all the buttons in this page by specified privileges |
使用的时候,直接在要使用的页面先引入
1 | import { getButtonsOfPage } from '../../utils/utils‘ |
然后在页面创建的时候,调用一下
1 | created () { |
这里区分了是页面按钮还是表单按钮,可以根据 buttonType 去做个区分,页面渲染是一样的
1 | <fragment v-for="(item, index) in allButtons" :key="index"> |
到此为止,页面和按钮的权限控制就完成了,下面附上后台返回的权限的数据格式
meta 里边定义了一个用于配置子页面时,当前菜单栏的高亮显示
type :定义了时页面还是按钮
subType :定义了是页面按钮还是表单按钮
注意⚠️:path 不能为 null ,如果没有 path ,随便写个字符串就可以,不然会报错
此处定义了菜单栏的 icon 的名称,在渲染的时候,名称和路径对应过来就可以了
1 | "data": [ |