- 将 admin 相关服务移动到 internal/service/admin 目录下 - 更新控制器中的服务导入路径引用 - 移除已合并的服务文件 - 添加统一工作约定文档 - 更新 API 接口定义的包路径
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package audit
|
|
|
|
import (
|
|
"context"
|
|
"github.com/gogf/gf/v2/os/glog"
|
|
"service.xpcool.com/internal/dao"
|
|
"service.xpcool.com/internal/model/do"
|
|
)
|
|
|
|
// AuditEvent 管理端操作审计事件。
|
|
type AuditEvent struct {
|
|
AdminID uint64
|
|
Permission, Method, Path, IP, Param string
|
|
DurationMS, StatusCode int
|
|
}
|
|
|
|
// IAdminAudit 管理端操作审计服务接口。
|
|
type IAdminAudit interface {
|
|
Record(context.Context, AuditEvent)
|
|
}
|
|
|
|
var localAdminAudit IAdminAudit
|
|
|
|
func AdminAudit() IAdminAudit {
|
|
if localAdminAudit == nil {
|
|
panic("AdminAudit implementation not registered")
|
|
}
|
|
return localAdminAudit
|
|
}
|
|
func RegisterAdminAudit(i IAdminAudit) { localAdminAudit = i }
|
|
|
|
type adminAudit struct{}
|
|
|
|
func NewAdminAudit() IAdminAudit { return &adminAudit{} }
|
|
|
|
// Record 采用尽力而为策略:审计落库失败会记录系统日志,但不影响原业务请求结果。
|
|
func (a *adminAudit) Record(ctx context.Context, e AuditEvent) {
|
|
_, err := dao.AdminOperationLog.Ctx(ctx).Data(do.AdminOperationLog{AdminUserId: e.AdminID, Permission: e.Permission, Method: e.Method, Path: e.Path, Ip: e.IP, RequestParam: e.Param, DurationMs: e.DurationMS, StatusCode: e.StatusCode}).Insert()
|
|
if err != nil {
|
|
glog.Error(ctx, err)
|
|
}
|
|
}
|