chore: 合入 stash Ops hardening 与 migration 000041

Ask/catalog 权限与审计加固、量表读权限统一,以及未提交的 ops hardening 变更。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-13 01:46:34 +08:00
co-authored by Cursor
parent 4889ff5916
commit 62cd8c45dd
70 changed files with 848 additions and 69 deletions
@@ -27,7 +27,7 @@ func (r *AdminRepo) ListSystemPrompts(ctx context.Context) ([]SystemPromptRow, e
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, scene, body, version, active, system, updated_at
FROM system_prompts
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -79,7 +79,7 @@ func (r *AdminRepo) ListKnowledgeSources(ctx context.Context) ([]KnowledgeSource
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, description, source_kind, version, active, system, updated_at
FROM knowledge_sources
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListBlockPolicies(ctx context.Context) ([]BlockPolicyRow, er
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, action, active, system, updated_at
FROM block_policies
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
+2 -2
View File
@@ -28,7 +28,7 @@ func (r *AdminRepo) ListBanners(ctx context.Context) ([]BannerRow, error) {
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, placement, image_url, link_path, sort_order, active, system, updated_at
FROM ops_banners
ORDER BY active DESC, sort_order ASC, code ASC`)
ORDER BY active DESC, sort_order ASC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -83,7 +83,7 @@ func (r *AdminRepo) ListFeedSlots(ctx context.Context) ([]FeedSlotRow, error) {
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, slot_key, placement, active, system, updated_at
FROM ops_feed_slots
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -36,7 +36,7 @@ func (r *AdminRepo) ListFilterRules(ctx context.Context) ([]FilterRuleRow, error
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, category, pattern, action, active, system, updated_at
FROM filter_rules
ORDER BY active DESC, category ASC, code ASC`)
ORDER BY active DESC, category ASC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListCrisisEvents(ctx context.Context) ([]CrisisEventRow, err
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, severity, active, system, updated_at
FROM crisis_events
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -38,7 +38,7 @@ func (r *AdminRepo) ListCrisisPolicies(ctx context.Context) ([]CrisisPolicyRow,
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, severity, pattern, action, helpline_text, active, system, updated_at
FROM crisis_policies
ORDER BY active DESC, severity DESC, code ASC`)
ORDER BY active DESC, severity DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -24,7 +24,7 @@ func (r *AdminRepo) ListFunnelDefinitions(ctx context.Context) ([]FunnelDefiniti
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, active, system, updated_at
FROM funnel_definitions
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListHandoffCases(ctx context.Context) ([]HandoffCaseRow, err
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, status, active, system, updated_at
FROM ask_handoff_cases
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -24,7 +24,7 @@ func (r *AdminRepo) ListImageCardDecks(ctx context.Context) ([]ImageCardDeckRow,
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, active, system, updated_at
FROM image_card_decks
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListInterventionOutcomes(ctx context.Context) ([]Interventio
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, outcome, active, system, updated_at
FROM intervention_outcomes
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -26,7 +26,7 @@ func (r *AdminRepo) ListKnowledgeChunks(ctx context.Context) ([]KnowledgeChunkRo
rows, err := r.Pool.Query(ctx, `
SELECT id, code, source_code, title, body, active, system, updated_at
FROM knowledge_chunks
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListModerationCases(ctx context.Context) ([]ModerationCaseRo
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, status, active, system, updated_at
FROM moderation_cases
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -26,7 +26,7 @@ func (r *AdminRepo) ListPrivacyRequests(ctx context.Context) ([]PrivacyRequestRo
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, kind, status, active, system, updated_at
FROM privacy_requests
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -76,6 +76,15 @@ func (r *AdminRepo) CreateAdminQualityFeedback(
if !ok {
return nil, errors.New("ask thread not found")
}
if messageID != nil {
inThread, err := r.askMessageInThread(ctx, threadID, *messageID)
if err != nil {
return nil, err
}
if !inThread {
return nil, errors.New("message not in thread")
}
}
tx, err := r.Pool.Begin(ctx)
if err != nil {
return nil, err
@@ -117,6 +126,18 @@ func (r *AskRepo) CreateUserQualityFeedback(
if err != nil {
return nil, errors.New("ask thread not found")
}
if messageID != nil {
var n int
err = r.Pool.QueryRow(ctx, `
SELECT 1 FROM ask_messages
WHERE id=$1 AND thread_id=$2 AND deleted_at IS NULL`, *messageID, threadID).Scan(&n)
if errors.Is(err, pgx.ErrNoRows) {
return nil, errors.New("message not in thread")
}
if err != nil {
return nil, err
}
}
var f QualityFeedbackRow
err = r.Pool.QueryRow(ctx, `
INSERT INTO ask_quality_feedback(thread_id, message_id, source, rating, tag, note, created_by_user)
@@ -138,6 +159,17 @@ func (r *AdminRepo) askThreadExists(ctx context.Context, threadID uuid.UUID) (bo
return err == nil, err
}
func (r *AdminRepo) askMessageInThread(ctx context.Context, threadID, messageID uuid.UUID) (bool, error) {
var n int
err := r.Pool.QueryRow(ctx, `
SELECT 1 FROM ask_messages
WHERE id=$1 AND thread_id=$2 AND deleted_at IS NULL`, messageID, threadID).Scan(&n)
if errors.Is(err, pgx.ErrNoRows) {
return false, nil
}
return err == nil, err
}
func validateFeedback(rating int, tag, note *string) error {
if rating < 1 || rating > 5 {
return errors.New("rating must be 1-5")
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListReportTemplates(ctx context.Context) ([]ReportTemplateRo
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, scene, active, system, updated_at
FROM report_templates
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -24,7 +24,7 @@ func (r *AdminRepo) ListRhythmConfigs(ctx context.Context) ([]RhythmConfigRow, e
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, active, system, updated_at
FROM rhythm_configs
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
+1 -1
View File
@@ -106,7 +106,7 @@ type ScaleAdminItem struct {
func (r *ScaleRepo) ListAllAdmin(ctx context.Context) ([]ScaleAdminItem, error) {
rows, err := r.Pool.Query(ctx, `
SELECT id, slug, title, description, status FROM scales
WHERE deleted_at IS NULL ORDER BY created_at`)
WHERE deleted_at IS NULL ORDER BY created_at LIMIT 500`)
if err != nil {
return nil, err
}
@@ -26,7 +26,7 @@ func (r *AdminRepo) ListScheduledPublications(ctx context.Context) ([]ScheduledP
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, target_kind, target_code, active, system, updated_at
FROM ops_scheduled_publications
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -24,7 +24,7 @@ func (r *AdminRepo) ListStarConfigs(ctx context.Context) ([]StarConfigRow, error
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, active, system, updated_at
FROM star_configs
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}
@@ -25,7 +25,7 @@ func (r *AdminRepo) ListToolDefinitions(ctx context.Context) ([]ToolDefinitionRo
rows, err := r.Pool.Query(ctx, `
SELECT id, code, title, description, active, system, updated_at
FROM tool_definitions
ORDER BY active DESC, code ASC`)
ORDER BY active DESC, code ASC LIMIT 500`)
if err != nil {
return nil, err
}