直接进入正题,总得分为两块,一块是表结构,另一块为实现思路(仅供参考)
一、 表结构
1、 菜单表(right)
字段 类型 注释
id long 主键
name varchar 名称
url varchar 地址
ico varchar 图标
tips varchar 提示信息
parentId long 上级菜单Id
level int 级别:1-3为菜单,4为按钮,5为接口
sort int 排序
2、 角色表(role)
字段 类型 注释
id long 主键
name varchar 名称
desc varchar 描述
code varchar 编码
sort int 排序
3、 角色菜单表(role_right)
字段 类型 注释
id long 主键
roleId long 角色ID
rightId long 菜单ID
4、 用户表(user)
字段 类型 注释
id long 主键
name varchar 姓名
account varchar 账号
password varchar 密码
5、 用户角色表(user_role)
字段 类型 注释
id long 主键
userId long 用户Id
roleId long 角色Id
5、 用户登陆记录表(login_token),过期时间由系统检测
字段 类型 注释
id long 主键
date date 登陆日期
token varchar token
userId long 用户Id
二、 实现思路
1、前端
用户登录,返回token;
根据token查询用户菜单信息,并返回json数据,存入客户端;
根据菜单数据,动态显示菜单,按钮
前端跳转页面,需要在路由中加入前端拦截,读取本地权限数据进行匹配
用户访问接口,后端进行校验
2、后端
编写拦截器,拦截所有url,过滤掉特殊不需要拦截的url;
获取请求中的接口地址,不包含参数;
获取当前请求token,查询用户角色;
根据角色查询所有的接口,拿当前请求的接口进行比对,存在则放行,不存在,则返回错误信息
以上仅为个人设计思路,如有不好的地方,欢迎指正。