后台管理系统的通用权限解决方案(十二)数据模型、基于SpringCloud和Nacos的后端项目搭建
后台管理系统的通用权限解决方案(一)如何自定义一个starter?
后台管理系统的通用权限解决方案(二)SpringBoot整合Swagger Springfox实现接口日志文档
后台管理系统的通用权限解决方案(三)SpringBoot整合Knife4j生成接口文档
后台管理系统的通用权限解决方案(四)SpringBoot整合Dozer实现对象属性复制
后台管理系统的通用权限解决方案(五)SpringBoot整合hibernate-validator实现表单校验
后台管理系统的通用权限解决方案(六)SpringBoot整合Logback实现日志记录
后台管理系统的通用权限解决方案(七)SpringBoot整合SpringEvent实现操作日志记录(基于注解和切面实现)
后台管理系统的通用权限解决方案(八)认证机制介绍、JWT介绍与jjwt框架的使用
后台管理系统的通用权限解决方案(九)后台管理系统的通用权限解决方案(九)SpringBoot整合jjwt实现登录认证鉴权
后台管理系统的通用权限解决方案(十)如何自定义SpringMVC的参数解析器
后台管理系统的通用权限解决方案(十一)SpringBoot的统一异常处理
经过前面11个小节的学习,终于把通用权限系统涉及的技术学习完了。现在,就可以真正开始系统的开发了。
1 数据模型
本系统采用的权限数据模型是在经典的RBAC权限数据模型的基础之上进行改进的,共涉及到如下11张表:
t_auth_menu---------------菜单表
t_auth_resource-----------资源表
t_auth_role---------------角色表
t_auth_user---------------用户表
t_core_station------------岗位表
t_core_org----------------组织表
t_auth_user_role----------用户角色关系表
t_auth_role_org-----------角色组织关系表
t_auth_role_authority-----角色权限关系表
t_auth_login_log----------用户登录日志表
t_auth_opt_log------------用户操作日志表
需要说明的是菜单和资源其实都属于权限,是两种不同类型的权限,即菜单权限和资源权限。具体说明如下:
- 菜单权限:对应的是系统的菜单,不同的用户可能拥有不同的菜单权限,这样登录系统后看到的菜单也不同
- 资源权限:对应的是某个功能的访问接口,拥有权限则可以访问此接口,没有权限则禁止访问此接口
1.1 数据库auth_proj
create database auth_proj;
use auth_proj;
1.2 菜单表t_auth_menu
字段名 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
name | varchar | 菜单名称 |
describe_ | varchar | 功能描述 |
is_public | bit | 是否是公开菜单 |
path | varchar | 对应路由path |
component | varchar | 对应路由组件component |
is_enable | bit | 是否启用 |
sort_value | int | 排序 |
icon | varchar | 菜单图标 |
group_ | varchar | 菜单分组 |
parent_id | bigint | 父级菜单id |
create_user | bigint | 创建人id |
create_time | datetime | 创建时间 |
update_user | bigint | 更新人id |
update_time | datetime | 更新时间 |
1.3 资源表t_auth_resource
字段名 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
code | varchar | 资源编码 |
name | varchar | 接口名称 |
menu_id | bigint | 菜单ID |
method | varchar | HTTP请求方式 |
url | varchar | 接口请求url |
describe_ | varchar | 接口描述 |
create_user | bigint | 创建人id |
create_time | datetime | 创建时间 |
update_user | bigint | 更新人id |
update_time | datetime | 更新时间 |
1.4 角色表t_auth_role
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
name | varchar | 角色名称 |
code | varchar | 角色编码 |
describe_ | varchar | 角色描述 |
status | bit | 是否启用状态 |
readonly | bit | 是否内置角色 |
create_user | bigint | 创建人id |
create_time | datetime | 创建时间 |
update_user | bigint | 更新人id |
update_time | datetime | 更新时间 |
1.5 用户表t_auth_user
字段名 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
account | varchar | 账号 |
name | varchar | 姓名 |
org_id | bigint | 组织ID |
station_id | bigint | 岗位ID |
varchar | 邮箱 | |
mobile | varchar | 手机号 |
sex | varchar | 性别 |
status | bit | 启用状态 |
avatar | varchar | 头像 |
work_describe | varchar | 工作描述 |
password_error_last_time | datetime | 最后一次输错密码时间 |
password_error_num | int | 密码错误次数 |
password_expire_time | datetime | 密码过期时间 |
password | varchar | 密码 |
last_login_time | datetime | 最后登录时间 |
create_user | bigint | 创建人id |
create_time | datetime | 创建时间 |
update_user | bigint | 更新人id |
update_time | datetime | 更新时间 |
wqeeeeeee1.6 岗位表t_auth_station
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
name | varchar | 岗位名称 |
org_id | bigint | 组织ID |
status | bit | 是否启用状态 |
describe_ | varchar | 描述 |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
update_time | datetime | 更新时间 |
update_user | bigint | 更新人ID |
1.7 组织表t_auth_org
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
name | varchar | 组织名称 |
abbreviation | varchar | 简称 |
parent_id | bigint | 父ID |
tree_path | varchar | 树结构 |
sort_value | int | 排序 |
status | bit | 状态 |
describe_ | varchar | 描述 |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
update_time | datetime | 更新时间 |
update_user | bigint | 更新人ID |
1.8 用户角色关系表t_auth_user_role
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
role_id | bigint | 角色ID |
user_id | bigint | 用户ID |
create_user | bigint | 创建人ID |
create_time | datetime | 创建时间 |
1.9 角色组织关系表t_auth_role_org
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
role_id | bigint | 角色ID |
org_id | bigint | 组织ID |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
1.10 角色权限关系表t_auth_role_authority
字段名称 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
authority_id | bigint | 权限ID |
authority_type | varchar | 权限类型 MENU:菜单 RESOURCE:资源 |
role_id | bigint | 角色ID |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
1.11 用户登录日志表t_auth_login_log
字段名 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
request_ip | varchar | 操作IP |
user_id | bigint | 登录人ID |
user_name | varchar | 登录人姓名 |
account | varchar | 登录人账号 |
description | varchar | 登录描述 |
login_date | date | 登录时间 |
ua | varchar | 浏览器请求头 |
browser | varchar | 浏览器名称 |
browser_version | varchar | 浏览器版本 |
operating_system | varchar | 操作系统 |
location | varchar | 登录地点 |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
1.12 用户操作日志表t_auth_opt_log
字段名 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
request_ip | varchar | 操作IP |
type | varchar | 日志类型 OPT:操作类型 EX:异常类型 |
user_name | varchar | 操作人 |
description | varchar | 操作描述 |
class_path | varchar | 类路径 |
action_method | varchar | 请求方法 |
request_uri | varchar | 请求地址 |
http_method | varchar | 请求类型 GET;POST;PUT;DELETE;PATCH;TRACE;HEAD;OPTIONS |
params | longtext | 请求参数 |
result | longtext | 返回值 |
ex_desc | longtext | 异常详情信息 |
ex_detail | longtext | 异常描述 |
start_time | timestamp | 开始时间 |
finish_time | timestamp | 完成时间 |
consuming_time | bigint | 消耗时间 |
ua | varchar | 浏览器请求头 |
create_time | datetime | 创建时间 |
create_user | bigint | 创建人ID |
2 后端项目搭建
本项目以SpringCloud微服务的架构进行开发,使用Nacos作为服务注册中心,使用Feign实现远程调用。
2.1 生成代码
使用IDEA插件:MybatisPlus,根据数据库表结构生成基本代码,详见MyBatisPlus详解(三)lambdaQuery、lambdaUpdate、批量新增、代码生成、Db静态工具、逻辑删除
代码生成后,根据需要移动到不同包下,如图:
- 实体类
- Controller、Service、Mapper
2.2 安装Nacos
安装Nacos的步骤详见:SpringCloud学习笔记(二)Ribbon负载均衡、Nacos注册中心、Nacos与Eureka的区别
安装并启动Nacos后,为该项目创建命名空间:
2.3 编写配置文件
在auth-service
的resources
目录下,创建配置文件如下:
- application.yml
spring:
profiles:
active: dev
application:
name: auth-service
- application-dev.yml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/auth_proj?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
server-addr: localhost:8848
discovery:
namespace: ac4a8b85-577a-4765-81a9-b88b7b86595d
mybatis-plus:
type-aliases-package: com.itweid.common.entity
mapper-locations: classpath*:/mapper/**/*.xml
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
2.4 启动项目
为auth-service
创建启动类:
package com.itweid.auth;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author: itweid
* @since: 2024-10-30 17:08:45
*/
@SpringBootApplication
public class AuthServiceApp {
public static void main(String[] args) {
SpringApplication.run(AuthServiceApp.class, args);
}
}
启动项目,可以在Nacos中看到已经注册的服务:
至此,后端项目搭建完成,后续慢慢将前面所学的技术添加到项目中,并实现权限管理的功能。
…
本节完,更多内容查阅:后台管理系统的通用权限解决方案