restrict v3

This commit is contained in:
tamakyi
2026-10-18 21:36:03 +08:00
parent 6111546bbd
commit efb19606a7
2 changed files with 29 additions and 9 deletions
+13 -9
View File
@@ -178,15 +178,6 @@ func PublishAnswer(ctx context.Context, pageUser *db.User, question *db.Question
ctx.Success("question/item")
return
}
// L2:先把该题置为私密再写入回答,任何时刻都不会出现「公开 + 已作答」的中间态。
if db.RestrictionAtLeast(restrictionLevel, db.RestrictionL2) {
if err := db.Questions.SetPrivate(ctx.Request().Context(), question.ID); err != nil {
logrus.WithContext(ctx.Request().Context()).WithError(err).Error("Failed to force question private")
ctx.SetInternalError()
ctx.Success("question/item")
return
}
}
// 🚨 Content security check.
// 统一守卫:按箱主「审核严格度」裁决是否放行(审核源不可用仍为 fail-closed,
@@ -198,6 +189,19 @@ func PublishAnswer(ctx context.Context, pageUser *db.User, question *db.Question
return
}
// L2 收窄公开:审核通过后再把该题置为私密,然后写入回答。
// 顺序不能提前到审核之前 —— 审核失败(违规或审核源不可用,fail-closed)会直接返回,
// 那时题目已经被改成私密,等于箱主一次失败的编辑让原有公开内容凭空消失。
// 放在这里仍然满足「任何时刻都不出现公开 + 已作答」:此刻它还是一条未作答的私密题。
if db.RestrictionAtLeast(restrictionLevel, db.RestrictionL2) {
if err := db.Questions.SetPrivate(ctx.Request().Context(), question.ID); err != nil {
logrus.WithContext(ctx.Request().Context()).WithError(err).Error("Failed to force question private")
ctx.SetInternalError()
ctx.Success("question/item")
return
}
}
if len(f.Images) > 0 {
image := f.Images[0]