From c492a1cc853f99fb1d0ccc920d395f80b6b7a9de Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 16 Jul 2026 22:52:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8E=E5=8F=B0=E6=96=B0?= =?UTF-8?q?=E5=BB=BA/=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=E8=AF=AF?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=BC=BA=E5=88=B6=E6=94=B9=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 仅部署 bootstrap 首个超级管理员需强制改一次初始密码, 新建管理员与重置密码不再设置 password_must_change。 --- backend/internal/modules/adminmgr/repository.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/internal/modules/adminmgr/repository.go b/backend/internal/modules/adminmgr/repository.go index 907a599..0c22a7d 100644 --- a/backend/internal/modules/adminmgr/repository.go +++ b/backend/internal/modules/adminmgr/repository.go @@ -77,13 +77,14 @@ func (r *Repository) Create(ctx context.Context, req CreateAdminRequest) (*Admin if err != nil { return nil, err } + // 仅部署 bootstrap 首个超级管理员会强制改密;后台新建账号不强制。 admin := model.AdminUser{ Username: req.Username, PasswordHash: string(hash), Nickname: req.Nickname, Status: "active", TokenVersion: 1, - PasswordMustChange: true, + PasswordMustChange: false, } if err := r.db.WithContext(ctx).Create(&admin).Error; err != nil { return nil, err @@ -201,10 +202,11 @@ func (r *Repository) ResetPassword(ctx context.Context, id uint64, newPwd string if err != nil { return err } + // 管理员重置密码后直接可用,不再二次强制改密(强制改密仅用于 bootstrap 初始账号)。 return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { if err := tx.Model(&admin).Updates(map[string]any{ "password_hash": string(hash), - "password_must_change": true, + "password_must_change": false, }).Error; err != nil { return err }