实现了完整的后台管理系统,用于管理小程序中的书籍数据,包括:
在 users 表中添加 role 字段,用于区分管理员和普通用户:
ALTER TABLE `users`
ADD COLUMN `role` VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户' AFTER `status`,
ADD INDEX `idx_role` (`role`);
执行 admin_schema.sql 脚本会自动创建默认管理员账号:
adminadmin123(MD5加密后:0192023a7bbd73250516f069df18b500)admin文件:book/src/main/java/com/yu/book/domain/User.java
添加 role 字段:
private String role; // 用户角色:admin-管理员,user-普通用户
文件:book/src/main/resources/mapper/UserMapper.xml
resultMap 中添加 role 字段映射insert 语句中添加 role 字段update 语句中添加 role 字段更新文件:book/src/main/java/com/yu/book/admin/service/AdminService.java
主要功能:
role 为 admin 的用户可以登录文件:book/src/main/java/com/yu/book/admin/controller/AdminController.java
接口:POST /api/admin/login
文件:book/src/main/java/com/yu/book/admin/service/AdminBookService.java
主要功能:
文件:book/src/main/java/com/yu/book/admin/controller/AdminBookController.java
接口列表:
GET /api/admin/book/list - 分页查询书籍GET /api/admin/book/{id} - 根据ID查询书籍POST /api/admin/book - 创建书籍PUT /api/admin/book/{id} - 更新书籍DELETE /api/admin/book/{id} - 删除书籍DELETE /api/admin/book/batch - 批量删除书籍PUT /api/admin/book/{id}/publish - 上架书籍PUT /api/admin/book/{id}/unpublish - 下架书籍PUT /api/admin/book/batch/publish - 批量上架书籍PUT /api/admin/book/batch/unpublish - 批量下架书籍文件:book/src/main/java/com/yu/book/admin/interceptor/AdminInterceptor.java
功能:
/api/admin/** 路径的请求/api/admin/login文件:book/src/main/java/com/yu/book/admin/config/AdminWebConfig.java
配置拦截器:
/api/admin/**/api/admin/login文件:book-admin/utils/api.js
包含所有后台管理系统的API接口:
文件:book-admin/pages/login.html
功能:
文件:book-admin/pages/books.html
功能:
# 执行数据库脚本
mysql -u root -p books_db < book/src/main/resources/db/admin_schema.sql
确保后端服务已启动(端口8081)
使用浏览器打开 book-admin/pages/login.html
使用默认管理员账号登录:
adminadmin123登录成功后,可以:
role 为 admin 的用户可以登录后台管理系统role 为 user)尝试登录会返回错误:"您不是管理员,无权登录后台管理系统"admin_token_{userId}POST /api/admin/login
请求体:
{
"username": "admin",
"password": "admin123"
}
响应:
{
"code": 200,
"message": "登录成功",
"data": {
"id": 1,
"username": "admin",
"nickname": "管理员",
"role": "admin",
"token": "admin_token_1"
}
}
所有书籍管理接口都需要在请求头中携带token:
Authorization: admin_token_1
GET /api/admin/book/list?page=1&size=10&keyword=&status=1&categoryId=
参数:
page - 页码(默认:1)size - 每页数量(默认:10)keyword - 关键词(可选,搜索书名、作者)status - 状态(可选,0-下架,1-上架)categoryId - 分类ID(可选)响应:
{
"code": 200,
"message": "成功",
"data": {
"list": [...],
"total": 100,
"page": 1,
"size": 10
}
}
POST /api/admin/book
请求体:
{
"title": "书名",
"author": "作者",
"cover": "封面URL",
"image": "图片URL",
"brief": "简介",
"desc": "描述",
"introduction": "详细介绍",
"price": 0.00,
"isFree": false,
"isVip": false,
"categoryId": 1,
"status": 1
}
PUT /api/admin/book/{id}
请求体:同创建书籍
DELETE /api/admin/book/{id}
PUT /api/admin/book/{id}/publish
PUT /api/admin/book/{id}/unpublish
执行 admin_schema.sql 脚本会自动创建默认管理员账号。
在数据库中执行以下SQL:
-- 创建管理员账号
INSERT INTO `users` (`username`, `nickname`, `password`, `role`, `status`, `created_at`, `updated_at`)
VALUES ('admin', '管理员', '0192023a7bbd73250516f069df18b500', 'admin', 1, NOW(), NOW());
-- 密码:admin123(MD5加密后:0192023a7bbd73250516f069df18b500)
或者将现有用户设置为管理员:
UPDATE `users` SET `role` = 'admin' WHERE `username` = 'your_username';
import com.yu.book.util.PasswordUtil;
String password = "admin123";
String encryptedPassword = PasswordUtil.encrypt(password);
System.out.println("加密后的密码: " + encryptedPassword);
admin123 的MD5值为 0192023a7bbd73250516f069df18b500admin_token_{userId}),实际项目中应该使用JWT Tokenbook-admin/utils/api.js 中,默认是 http://localhost:8081登录测试:
权限测试:
功能测试: