This commit is contained in:
tamakyi
2026-10-19 01:11:28 +08:00
parent 84f8afe8b1
commit bd613a6f5a
15 changed files with 68 additions and 11 deletions
+8
View File
@@ -25,6 +25,14 @@ func UpdateModerationStrictness(ctx context.Context, f form.UpdateModerationStri
return
}
// 处置期内禁止修改档位:EffectiveStrictness 会强制 strict,允许保存只会让箱主
// 以为「我调成宽松了」,实际审核仍按严格执行,是更糟的误导。
if level, _, err := db.Restrictions.ActiveLevel(ctx.Request().Context(), ctx.User.ID); err == nil && level != "" {
ctx.SetErrorFlash(i18n.T(ctx.Lang(), "admin.flash.strictnessLocked"))
ctx.Redirect(returnTab(ctx))
return
}
// 非法取值一律拒绝保存:宁可保留原档位,也不要写入一个解释不了的中间状态。
if !censor.IsValidStrictness(f.Strictness) {
ctx.SetErrorFlash(i18n.T(ctx.Lang(), "admin.flash.moderationStrictnessInvalid"))
+5
View File
@@ -33,6 +33,11 @@ func Profile(ctx context.Context) {
ctx.Data["HasPagePassword"] = ctx.User.PagePassword != ""
ctx.Data["HasAskPassword"] = ctx.User.AskPassword != ""
ctx.Data["ActiveProfileTab"] = ProfileTab(ctx.Query("tab"))
// 处置期内审核严格度被强制为最高档且不可修改(见 moderation.EffectiveStrictness),
// 设置页需要把下拉和保存按钮禁用,否则箱主会以为自己的修改生效了。
if level, _, err := db.Restrictions.ActiveLevel(ctx.Request().Context(), ctx.User.ID); err == nil && level != "" {
ctx.Data["StrictnessLocked"] = true
}
ctx.Data["TagLimits"] = tagLimits()
ctx.Data["ChatLimits"] = chatLimits()
InjectFeatureViews(ctx)
+3 -3
View File
@@ -59,7 +59,7 @@ type voteForm struct {
// censorCheck 对单段文本做内容审核。与提问 / 私聊共用 moderation.Check 守卫,
// 是否拦截由发起人的「审核严格度」档位决定;fail-closed,服务异常时拒绝发布。
func censorCheck(ctx context.Context, text string) error {
_, err := moderation.Check(ctx.Request().Context(), moderation.StrictnessFor(ctx.User.ModerationStrictness), ctx.Lang(), text)
_, err := moderation.Check(ctx.Request().Context(), moderation.EffectiveStrictness(ctx.Request().Context(), ctx.User.ID, ctx.User.ModerationStrictness), ctx.Lang(), text)
return err
}
@@ -146,7 +146,7 @@ func parseVoteMeta(ctx context.Context, draft bool) (*voteForm, error) {
// 内容审核(fail-closed):非草稿执行;草稿跳过(见上说明)
var censorMeta datatypes.JSON
if !draft {
titleCensor, err := moderation.Check(ctx.Request().Context(), moderation.StrictnessFor(ctx.User.ModerationStrictness), ctx.Lang(), title)
titleCensor, err := moderation.Check(ctx.Request().Context(), moderation.EffectiveStrictness(ctx.Request().Context(), ctx.User.ID, ctx.User.ModerationStrictness), ctx.Lang(), title)
if err != nil {
return nil, err
}
@@ -974,7 +974,7 @@ func voteOwnerStrictness(ctx context.Context, ownerID uint) censor.Strictness {
Error("Failed to get vote owner for moderation strictness")
return censor.StrictnessStrict
}
return moderation.StrictnessFor(owner.ModerationStrictness)
return moderation.EffectiveStrictness(ctx.Request().Context(), ownerID, owner.ModerationStrictness)
}
// censorVoteForPublish 发布前对投票全部可见文本做内容审核(fail-closed)。