权限设计,可控制每个接口的使用。
权限功能设计说明
1 功能介绍
1.1 已实现功能
用户管理
Ø 新增用户信息
Ø 删除用户信息
Ø 修改用户信息
Ø 查看用户信息
Ø 分配角色
角色管理
Ø 新增用户角色
Ø 删除用户角色
Ø 修改用户角色
Ø 查询用户角色
Ø 分配用户
权限验证
验证匿名用户权限:匿名用户只能访问登录、获取验证码、判断是否登录等无需授权功能。
验证授权用户权限:只允许访问公共接口(获取下拉数据、获取地址信息等接口)和已授权接口。
1.2 用户管理模块
见表结构介绍。
1.3 角色管理模块
见表接口介绍。
1.4 验证功能验证模块
未登录验证
客户端访问接口:访问服务器某个接口并至少传一个参数(这里用的是页面唯一编码)。
服务端验证权限:判断当前接口是否允许匿名用户访问。是:允许访问;否:不允许访问。
已登录验证
客户端访问接口:访问服务器某个接口并至少传一个参数(这里用的是页面唯一编码)。
服务端验证权限:判断当前接口是否允属于公共接口,是:允许访问;否:判断当前用户是否拥有该权限,是:允许访问;否:不允许访问。
权限验证流程图
1.5 表结构
Menu(菜单表)
用于存放菜单信息,包括菜单名称、图标、样式、菜单对应的URL等,多级菜单需要存菜单级别、父级ID。
MenuFunction(菜单功能表)
用于存放菜单所对应的接口编码、接口所属菜单(如果一个接口存在多个菜单下,同时需要存多条数据)、接口所属页面(只所以要存页面是为了控制页面上按钮的权限,方便前端做权限验证)、接口所属操作ID(页面按钮ID)。
Role(角色表)
用于处方用户和角色关系,目前用户和角色做的是一对一关系。
RoleFunction(角色功能表)
用于存放角色和功能接口对应关系,此表为业务核心表。用于验证用户是否有访问权限。
表结构详情:
Menu(菜单表)
名称 |
代码 |
主键ID |
ID |
菜单URL |
MenuUrl |
菜单名称 |
PageName |
状态(1:启用,0禁用) |
Status |
菜单级别 |
Level |
父级ID |
ParentID |
NO |
NO |
创建时间 |
CreateTime |
修改时间 |
ModifyTime |
排序 |
Sort |
icon |
icon |
MenuFunction(菜单功能表)
名称 |
代码 |
主键ID |
ID |
功能编码(功能分类) |
FuncCategory |
功能名称 |
Name |
菜单ID |
MenuID |
页面编码 |
PageCode |
操作id(页面按钮ID) |
OperateID |
接口id |
Interface |
类型(1:默认接口,2:对外接口,3:通用接口) |
Type |
NO |
NO |
创建时间 |
CreateTime |
修改时间 |
ModifyTime |
排序 |
Sort |
状态(1:启用,2:禁用) 接口访问级别0匿名1登录即可访问2授权才能访问 |
Status AccessLevel |
Role(角色表)
名称 |
代码 |
ID |
ID |
角色名称 |
RoleName |
自动排序 |
NO |
状态 |
Status |
创建时间 |
CreateTime |
修改时间 |
ModifyTime |
用户微信昵称 |
CreateID |
ModifyID |
ModifyID |
RoleFunction(角色功能表)
名称 |
代码 |
主键ID |
ID |
自增量 |
NO |
角色ID |
RoleID |
菜单id |
MenuID |
功能id |
FuncID |
功能分类 |
FuncCategory |
按钮标识 |
OperateID |
接口id |
Interface |
页面编码 |
PageCode |
状态(1.启用,2.禁用) |
Status |
类型(1.菜单,2.功能,3.第三方接口) |
Type |
创建时间 |
CreateTime |
修改时间 |
ModifyTime |
排序 |
Sort |
接口访问级别0匿名1登录即可访问2授权才能访问 |
AccessLevel |
1.6 代码
前端
1. 封装get、post、getAsnyc和postAsync方法,传入pageCode参数。
2. 页面添加pageCode全局变量
3. 菜单根据用户权限自动加载
后端
Ø 权限验证公共类:
1. 验证当前接口是否属于看匿名访问接口
2. 验证当前接口是否已授权
Ø 调用权限验证:
1. Base类添加权限验证方法,此处分三部分验证1、验证当前调用的接口是否属于可匿接口;2验证当前用户是否登录超时;3、验证当前接口是否允许调用。
2. 集成Base类,执行功能前调用Base类中权限验证方法。