34 lines
774 B
Go
34 lines
774 B
Go
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)
|
|
}
|