From 856d414295f03e5056538314ff541810a80d2c67 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 27 Aug 2026 19:44:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20JSON=20=E5=8C=96=E2=80=94=E2=80=94/api/adm?= =?UTF-8?q?in/users=20CRUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - admin_user.go:userForm 加 json tags,parseUserFormJSON(绑定+去白, ID 取路由参数);UserCreate/Update/Delete 校验错误改 APIError (400 校验、409 user_username_exists、403 自防/最后管理员、404 user_not_found、500),成功 {ok,redirect:?saved=1&msg=...} - i18n:新增 user_not_found(中英) - main.go:旧 POST /admin/users/new|:id/edit|:id/delete 移除, 改 POST/PUT/DELETE /api/admin/users[/:id](自防屏障保留) - user_form.html:表单改 blogAPI(FormID 分流 POST/PUT),错误内联 - user_list.html:删除改 blogDelete 委托 - p2/security 测试:环境路由同步 + 用户校验/注入用例改 JSON 断言 (TestAdminUserPasswordAndEmailEnforcement、TestAdminUserRoutesRejectNonNumericIDs) - main_test 冒烟补用户 API 断言;go build/vet/test 全绿 --- handlers/admin_user.go | 129 +++++++++++++++------------------ handlers/p2_validation_test.go | 60 ++++++--------- handlers/security_test.go | 36 ++++----- i18n/i18n.go | 2 + main.go | 11 ++- main_test.go | 4 + templates/admin/user_form.html | 24 +++++- templates/admin/user_list.html | 7 +- 8 files changed, 133 insertions(+), 140 deletions(-) diff --git a/handlers/admin_user.go b/handlers/admin_user.go index ba64fad..bfa5ab4 100644 --- a/handlers/admin_user.go +++ b/handlers/admin_user.go @@ -13,17 +13,18 @@ import ( "gorm.io/gorm" ) -// userForm 保存提交的用户字段,外加共享创建/编辑表单模板的渲染元数据。 +// userForm 是后台用户创建/更新接口的 JSON 请求体, +// 同时供共享创建/编辑表单模板的渲染使用(IsEdit/Action/TitleText 非绑定字段)。 type userForm struct { - ID uint - Username string - Password string - DisplayName string - Email string - Gender string - Birthday string // 来自日期输入的 YYYY-MM-DD - Role string - Status int + ID uint `json:"-"` + Username string `json:"username"` + Password string `json:"password"` + DisplayName string `json:"display_name"` + Email string `json:"email"` + Gender string `json:"gender"` + Birthday string `json:"birthday"` // 来自日期输入的 YYYY-MM-DD + Role string `json:"role"` + Status int `json:"status"` IsEdit bool Action string TitleText string @@ -39,27 +40,21 @@ type userListView struct { StatusBadge string } -// parseUserForm 从请求中读取用户表单字段。 -func parseUserForm(c *gin.Context) userForm { - // 状态始终由
@@ -103,4 +101,22 @@ {{template "footer" .}} + + {{end}} diff --git a/templates/admin/user_list.html b/templates/admin/user_list.html index 6e8cdea..0b2bfe7 100644 --- a/templates/admin/user_list.html +++ b/templates/admin/user_list.html @@ -59,9 +59,10 @@ {{index $.Tr "article_edit"}} -
- +