Files
relspecgo/pkg/writers/pgsql/audit.go
Hein 5e1448dcdb
Some checks are pending
CI / Test (1.23) (push) Waiting to run
CI / Test (1.24) (push) Waiting to run
CI / Test (1.25) (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Build (push) Waiting to run
sql writer
2025-12-17 20:44:02 +02:00

75 lines
2.3 KiB
Go

package pgsql
import (
"fmt"
)
// AuditConfig defines audit configuration for tables
type AuditConfig struct {
// EnabledTables maps table names (schema.table or just table) to audit settings
EnabledTables map[string]*TableAuditConfig
// AuditSchema is where audit tables are created (default: same as table schema)
AuditSchema string
// UserFunction is the function to get current user (default: current_user)
UserFunction string
}
// TableAuditConfig defines audit settings for a specific table
type TableAuditConfig struct {
// TableName is the name of the table to audit
TableName string
// SchemaName is the schema of the table
SchemaName string
// TablePrefix for compatibility with old audit system
TablePrefix string
// AuditInsert tracks INSERT operations
AuditInsert bool
// AuditUpdate tracks UPDATE operations
AuditUpdate bool
// AuditDelete tracks DELETE operations
AuditDelete bool
// ExcludedColumns are columns to skip from audit
ExcludedColumns []string
// EncryptedColumns are columns to hide in audit (show as ***)
EncryptedColumns []string
}
// NewAuditConfig creates a default audit configuration
func NewAuditConfig() *AuditConfig {
return &AuditConfig{
EnabledTables: make(map[string]*TableAuditConfig),
AuditSchema: "public",
UserFunction: "current_user",
}
}
// EnableTableAudit enables audit for a specific table
func (ac *AuditConfig) EnableTableAudit(schemaName, tableName string) *TableAuditConfig {
key := fmt.Sprintf("%s.%s", schemaName, tableName)
config := &TableAuditConfig{
TableName: tableName,
SchemaName: schemaName,
TablePrefix: "",
AuditInsert: true,
AuditUpdate: true,
AuditDelete: true,
ExcludedColumns: []string{"updatecnt", "prefix"},
EncryptedColumns: []string{},
}
ac.EnabledTables[key] = config
return config
}
// IsTableAudited checks if a table is configured for auditing
func (ac *AuditConfig) IsTableAudited(schemaName, tableName string) bool {
key := fmt.Sprintf("%s.%s", schemaName, tableName)
_, exists := ac.EnabledTables[key]
return exists
}
// GetTableConfig returns the audit config for a specific table
func (ac *AuditConfig) GetTableConfig(schemaName, tableName string) *TableAuditConfig {
key := fmt.Sprintf("%s.%s", schemaName, tableName)
return ac.EnabledTables[key]
}