权限功能设计说明
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. 菜单根据用户权限自动加载
4. 页面按钮权限控制(在页面控制按钮权限,减少接口调用的压力)
后端
Ø 权限验证公共类:
1. 验证当前接口是否属于看匿名访问接口
2. 验证当前接口是否已授权
Ø 调用权限验证:
1. Base类添加权限验证方法,此处分三部分验证1、验证当前调用的接口是否属于可匿接口;2验证当前用户是否登录超时;3、验证当前接口是否允许调用。
2. 集成Base类,执行功能前调用Base类中权限验证方法。