安全与可靠性: 修复配额并发、投票事务、密码授权与导出完整性
This commit is contained in:
+15
-2
@@ -133,6 +133,13 @@ type User struct {
|
||||
PagePassword string `json:"-" gorm:"column:page_password;type:varchar(255);default:''"`
|
||||
AskPassword string `json:"-" gorm:"column:ask_password;type:varchar(255);default:''"`
|
||||
|
||||
// PagePasswordVer / AskPasswordVer 是页面访问密码 / 提问密码的版本号。
|
||||
// 每次修改对应密码时 +1,session 中保存授权时的版本号;
|
||||
// 校验时若 session 中的版本号 != 当前版本号,则视为授权已失效。
|
||||
// 这让「修改页面密码」能立即撤销已泄露的旧授权(SEC-06)。
|
||||
PagePasswordVer uint `gorm:"default:0" json:"-"`
|
||||
AskPasswordVer uint `gorm:"default:0" json:"-"`
|
||||
|
||||
// 私聊相关
|
||||
AllowChat bool `json:"allow_chat" gorm:"default:false"`
|
||||
// 每个私聊会话的消息条数上限(用户自设)。default:20 仅是 DB 层兜底;
|
||||
@@ -884,7 +891,10 @@ func (db *users) UpdatePagePassword(ctx context.Context, id uint, password strin
|
||||
return err
|
||||
}
|
||||
user.SetPagePassword(password)
|
||||
return db.WithContext(ctx).Model(user).Update("page_password", user.PagePassword).Error
|
||||
return db.WithContext(ctx).Model(user).Updates(map[string]interface{}{
|
||||
"page_password": user.PagePassword,
|
||||
"page_password_ver": gorm.Expr("page_password_ver + 1"),
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (db *users) UpdateAskPassword(ctx context.Context, id uint, password string) error {
|
||||
@@ -893,7 +903,10 @@ func (db *users) UpdateAskPassword(ctx context.Context, id uint, password string
|
||||
return err
|
||||
}
|
||||
user.SetAskPassword(password)
|
||||
return db.WithContext(ctx).Model(user).Update("ask_password", user.AskPassword).Error
|
||||
return db.WithContext(ctx).Model(user).Updates(map[string]interface{}{
|
||||
"ask_password": user.AskPassword,
|
||||
"ask_password_ver": gorm.Expr("ask_password_ver + 1"),
|
||||
}).Error
|
||||
}
|
||||
|
||||
// 新增私聊设置
|
||||
|
||||
Reference in New Issue
Block a user