package middleware import ( "context" "net/http" "time" systemmodel "management/internal/erpserver/model/system" ) func (m *middleware) Audit(next http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { start := time.Now() defer func(res http.ResponseWriter, req *http.Request) { // 记录审计日志 go m.writeLog(req, start) }(w, r) next.ServeHTTP(w, r) } return http.HandlerFunc(fn) } func (m *middleware) writeLog(req *http.Request, start time.Time) { end := time.Now() user := m.AuthUser(req.Context()) al := systemmodel.NewAuditLog(req, user.Email, user.OS, user.Browser, start, end) c, cancel := context.WithTimeout(context.Background(), time.Second*3) defer cancel() _ = m.auditLogService.Create(c, al) }