学习不走弯路,通过《mall视频教程(最新版)》,使用更系统、高效的方式来学习mall电商实战项目吧!
权限模块数据库表解析
权限模块数据库表解析
权限管理功能是很多后台管理系统必不可少的功能,本节课程将带大家学习下mall项目中的权限模块,主要对其数据库表设计和功能做个介绍。
相关视频教程
整体功能与表结构
功能结构
数据库表结构
权限模块整体数据库结构如下,这里将原来的权限拆分成了菜单和资源,菜单管理用于控制前端菜单的显示和隐藏,资源管理用来控制后端接口的访问权限。
数据库表介绍
接下来我们将对每张表的用途做个详细介绍。
ums_admin
后台用户表,定义了后台用户的一些基本信息。
create table ums_admin
(
id bigint not null auto_increment,
username varchar(64) comment '用户名',
password varchar(64) comment '密码',
icon varchar(500) comment '头像',
email varchar(100) comment '邮箱',
nick_name varchar(200) comment '昵称',
note varchar(500) comment '备注信息',
create_time datetime comment '创建时间',
login_time datetime comment '最后登录时间',
status int(1) default 1 comment '帐号启用状态:0->禁用;1->启用',
primary key (id)
);
ums_role
后台用户角色表,定义了后台用户角色的一些基本信息,通过给后台用户分配角色来实现菜单和资源的分配。
create table ums_role
(
id bigint not null auto_increment,
name varchar(100) comment '名称',
description varchar(500) comment '描述',
admin_count int comment '后台用户数量',
create_time datetime comment '创建时间',
status int(1) default 1 comment '启用状态:0->禁用;1->启用',
sort int default 0,
primary key (id)
);
ums_admin_role_relation
后台用户和角色关系表,多对多关系表,一个角色可以分配给多个用户。
create table ums_admin_role_relation
(
id bigint not null auto_increment,
admin_id bigint,
role_id bigint,
primary key (id)
);
ums_menu
后台菜单表,用于控制后台用户可以访问的菜单,支持隐藏、排序和更改名称、图标。
create table ums_menu
(
id bigint not null auto_increment,
parent_id bigint comment '父级ID',
create_time datetime comment '创建时间',
title varchar(100) comment '菜单名称',
level int(4) comment '菜单级数',
sort int(4) comment '菜单排序',
name varchar(100) comment '前端名称',
icon varchar(200) comment '前端图标',
hidden int(1) comment '前端隐藏',
primary key (id)
);
ums_resource
后台资源表,用于控制后台用户可以访问的接口,使用了Ant路径的匹配规则,可以使用通配符定义一系列接口的权限。
create table ums_resource
(
id bigint not null auto_increment,
category_id bigint comment '资源分类ID',
create_time datetime comment '创建时间',
name varchar(200) comment '资源名称',
url varchar(200) comment '资源URL',
description varchar(500) comment '描述',
primary key (id)
);
ums_resource_category
后台资源分类表,在细粒度进行权限控制时,可能资源会比较多,所以设计了个资源分类的概念,便于给角色分配资源。
create table ums_resource_category
(
id bigint not null auto_increment,
create_time datetime comment '创建时间',
name varchar(200) comment '分类名称',
sort int(4) comment '排序',
primary key (id)
);
ums_role_menu_relation
后台角色菜单关系表,多对多关系,可以给一个角色分配多个菜单。
create table ums_role_menu_relation
(
id bigint not null auto_increment,
role_id bigint comment '角色ID',
menu_id bigint comment '菜单ID',
primary key (id)
);
ums_role_resource_relation
后台角色资源关系表,多对多关系,可以给一个角色分配多个资源。
create table ums_role_resource_relation
(
id bigint not null auto_increment,
role_id bigint comment '角色ID',
resource_id bigint comment '资源ID',
primary key (id)
);
ums_admin_login_log
后台用户登录日志表,用于记录后台用户登录日志。
create table ums_admin_login_log (
id bigint(20) not null auto_increment,
admin_id bigint(20) default null,
create_time datetime default null,
ip varchar(64) default null,
address varchar(100) default null,
user_agent varchar(100) default null comment '浏览器登录类型',
primary key (id)
)
功能介绍
接下了我们对权限管理功能做个介绍,演示一个完整的权限管理的流程。
功能清单
- 菜单管理:可以实现对后台管理系统左侧菜单的管理,支持更换图标、更换名称、控制菜单显示和排序;
- 资源管理:实现了基于访问路径的后台动态权限控制,控制的权限可以精确到接口级别;
- 角色管理:可以自定义角色,并为角色分配菜单和资源;
- 后台用户管理:可以对后台用户进行管理并分配角色,支持分配多个角色。
菜单管理
菜单主要是指管理后台左侧的菜单,管理功能可用于控制其隐藏显示及更换图片名称和排序,目前仅支持二级菜单。
- 查看菜单列表,可以控制隐藏显示及删除;
- 添加及编辑菜单,可以更改菜单的基本属性,只能添加前端项目
路由中定义
的菜单,并且前端名称
要与前端项目中定义的路由名称
一致;
- 菜单排序,给菜单设置排序后,菜单将按照设置的排序降序进行显示。
资源管理
所谓资源就是后台的接口,可以是单个接口,也可以是一系列接口的集合。这里我们使用了基于Ant的路径匹配,当后台用户访问某个接口时,如果这个后台用户分配了该资源就可以访问,否则无法访问。默认情况下,如果你没有对某个接口配置资源,则该资源直接允许访问。
- 查看资源列表,目前的资源是按控制器级别配置的,即一个控制器中所有的接口定义为一个资源,也可以配置到接口级别;
- 添加及编辑资源,这里我们添加了一个资源分类的概念,便于以后的资源分配;
角色管理
用于对后台用户角色进行管理,我们可以给角色分配指定的菜单和资源,这样被分配了角色的后台用户就可以访问这些菜单和资源了。
- 查看角色列表,这里我们需要注意下这三个角色
商品管理员
、订单管理员
及超级管理员
;
- 添加及编辑角色用于管理角色的基本属性;
- 分配菜单,可以给角色分配允许访问的菜单;
- 分配资源,可以给角色分配允许访问的后台资源;
后台用户管理
用于对后台用户进行管理,直接修改信息(包括修改密码)及分配角色。
- 查看用户列表,可以控制帐号的启用状态及删除帐号;
- 添加及编辑用户,可以管理用户的基本信息及修改密码;
- 分配角色,可以为用户分配角色,指定角色用户可以访问指定菜单和资源。
动态菜单控制
这里我们来演示下动态菜单的控制,我们有两个后台用户,系统管理员和商品管理员,系统管理员分配了所有菜单,商品管理员只分配了商品相关的菜单。
- 使用系统管理员帐号登录,左侧显示了所有菜单:
- 使用商品管理员帐号登录,左侧仅显示商品相关菜单:
动态资源控制
这里我们来演示下动态资源的控制,我们给商品管理员只分配了商品相关的资源,他无法访问其他资源。
- 将订单相关菜单开放给商品管理员,但是并没有给他分配订单相关的资源;
- 由于没有给商品管理员分配订单模块相关后台资源,所以当商品管理员访问订单模块时会提示没有相关权限。