固化七月迭代审计治理进展以隔离线上热修
Constraint: 切换 main 前必须保存当前七月分支全部项目进展,套餐生效提案仅属于 Iteration/7-11。 Rejected: 将七月套餐修复直接移植到 main | 两个分支的可靠投递架构不同。 Confidence: medium Scope-risk: broad Directive: 不得将本提交整体 cherry-pick 到 main;main 套餐热修必须基于其纯 Asynq 代码独立实施。 Tested: git diff --check;openspec validate fix-package-activation-starvation --strict。 Not-tested: 按用户要求未运行自动化测试;go build ./... 因当前审计改造中的 Enterprise 模型字面量和 role.recordFailure 参数类型错误未通过。
This commit is contained in:
76
internal/model/audit_event.go
Normal file
76
internal/model/audit_event.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/datatypes"
|
||||
)
|
||||
|
||||
// AuditEvent 是不可变内部业务审计事件。
|
||||
type AuditEvent struct {
|
||||
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
|
||||
EventID string `gorm:"column:event_id;type:varchar(64);not null;uniqueIndex" json:"event_id"`
|
||||
OccurredAt time.Time `gorm:"column:occurred_at;type:timestamptz;not null" json:"occurred_at"`
|
||||
Category string `gorm:"column:category;type:varchar(64);not null" json:"category"`
|
||||
ActionCode string `gorm:"column:action_code;type:varchar(100);not null" json:"action_code"`
|
||||
ActionName string `gorm:"column:action_name;type:varchar(200);not null" json:"action_name"`
|
||||
Summary string `gorm:"column:summary;type:varchar(500);not null" json:"summary"`
|
||||
ActorKind string `gorm:"column:actor_kind;type:varchar(32);not null" json:"actor_kind"`
|
||||
ActorID string `gorm:"column:actor_id;type:varchar(128);not null" json:"actor_id"`
|
||||
ActorName string `gorm:"column:actor_name;type:varchar(200);not null" json:"actor_name"`
|
||||
ActorShopID *uint `gorm:"column:actor_shop_id" json:"actor_shop_id,omitempty"`
|
||||
ActorShopName string `gorm:"column:actor_shop_name;type:varchar(200);not null;default:''" json:"actor_shop_name,omitempty"`
|
||||
ActorEnterpriseID *uint `gorm:"column:actor_enterprise_id" json:"actor_enterprise_id,omitempty"`
|
||||
ActorEnterpriseName string `gorm:"column:actor_enterprise_name;type:varchar(200);not null;default:''" json:"actor_enterprise_name,omitempty"`
|
||||
Source string `gorm:"column:source;type:varchar(32);not null" json:"source"`
|
||||
RequestPath string `gorm:"column:request_path;type:varchar(300);not null;default:''" json:"request_path,omitempty"`
|
||||
RequestMethod string `gorm:"column:request_method;type:varchar(16);not null;default:''" json:"request_method,omitempty"`
|
||||
IPAddress string `gorm:"column:ip_address;type:varchar(64);not null;default:''" json:"ip_address,omitempty"`
|
||||
UserAgent string `gorm:"column:user_agent;type:varchar(500);not null;default:''" json:"user_agent,omitempty"`
|
||||
ScopeType string `gorm:"column:scope_type;type:varchar(32);not null" json:"scope_type"`
|
||||
ScopeID string `gorm:"column:scope_id;type:varchar(128);not null;default:''" json:"scope_id,omitempty"`
|
||||
ScopeName string `gorm:"column:scope_name;type:varchar(200);not null;default:''" json:"scope_name,omitempty"`
|
||||
Result string `gorm:"column:result;type:varchar(16);not null" json:"result"`
|
||||
RiskLevel string `gorm:"column:risk_level;type:varchar(16);not null" json:"risk_level"`
|
||||
ErrorCode string `gorm:"column:error_code;type:varchar(100);not null;default:''" json:"error_code,omitempty"`
|
||||
ErrorSummary string `gorm:"column:error_summary;type:varchar(500);not null;default:''" json:"error_summary,omitempty"`
|
||||
RequestID string `gorm:"column:request_id;type:varchar(100);not null;default:''" json:"request_id,omitempty"`
|
||||
CorrelationID string `gorm:"column:correlation_id;type:varchar(100);not null;default:''" json:"correlation_id,omitempty"`
|
||||
ParentEventID string `gorm:"column:parent_event_id;type:varchar(64);not null;default:''" json:"parent_event_id,omitempty"`
|
||||
BatchTotal int `gorm:"column:batch_total;not null;default:0" json:"batch_total"`
|
||||
SuccessCount int `gorm:"column:success_count;not null;default:0" json:"success_count"`
|
||||
FailCount int `gorm:"column:fail_count;not null;default:0" json:"fail_count"`
|
||||
Metadata datatypes.JSON `gorm:"column:metadata;type:jsonb;not null;default:'{}'" json:"metadata"`
|
||||
ContentHash string `gorm:"column:content_hash;type:varchar(64);not null" json:"content_hash"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamptz;not null;autoCreateTime" json:"created_at"`
|
||||
}
|
||||
|
||||
// TableName 返回统一审计事件表名。
|
||||
func (AuditEvent) TableName() string {
|
||||
return "tb_audit_event"
|
||||
}
|
||||
|
||||
// AuditEventResource 是审计事件发生时的独立资源快照。
|
||||
type AuditEventResource struct {
|
||||
ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
|
||||
AuditEventID uint `gorm:"column:audit_event_id;not null" json:"audit_event_id"`
|
||||
ResourceType string `gorm:"column:resource_type;type:varchar(64);not null" json:"resource_type"`
|
||||
ResourceID *string `gorm:"column:resource_id;type:varchar(128)" json:"resource_id,omitempty"`
|
||||
ResourceKey string `gorm:"column:resource_key;type:varchar(200);not null" json:"resource_key"`
|
||||
DisplayName string `gorm:"column:display_name;type:varchar(255);not null;default:''" json:"display_name"`
|
||||
Relation string `gorm:"column:relation;type:varchar(16);not null" json:"relation"`
|
||||
Role string `gorm:"column:role;type:varchar(64);not null" json:"role"`
|
||||
IdentitySnapshot datatypes.JSON `gorm:"column:identity_snapshot;type:jsonb;not null;default:'{}'" json:"identity_snapshot"`
|
||||
BeforeData datatypes.JSON `gorm:"column:before_data;type:jsonb;not null;default:'{}'" json:"before_data"`
|
||||
AfterData datatypes.JSON `gorm:"column:after_data;type:jsonb;not null;default:'{}'" json:"after_data"`
|
||||
SubjectVisibility string `gorm:"column:subject_visibility;type:varchar(24);not null" json:"subject_visibility"`
|
||||
SubjectSummary string `gorm:"column:subject_summary;type:varchar(500);not null;default:''" json:"subject_summary,omitempty"`
|
||||
SubjectData datatypes.JSON `gorm:"column:subject_data;type:jsonb;not null;default:'{}'" json:"subject_data"`
|
||||
SortOrder int `gorm:"column:sort_order;not null;default:0" json:"sort_order"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamptz;not null;autoCreateTime" json:"created_at"`
|
||||
}
|
||||
|
||||
// TableName 返回审计事件资源表名。
|
||||
func (AuditEventResource) TableName() string {
|
||||
return "tb_audit_event_resource"
|
||||
}
|
||||
Reference in New Issue
Block a user