This commit is contained in:
58
pkg/constants/asset_audit.go
Normal file
58
pkg/constants/asset_audit.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package constants
|
||||
|
||||
// 资产审计日志结果状态常量
|
||||
const (
|
||||
AssetAuditResultSuccess = "success" // 成功
|
||||
AssetAuditResultFailed = "failed" // 失败
|
||||
AssetAuditResultDenied = "denied" // 拒绝
|
||||
)
|
||||
|
||||
// 资产审计日志操作者类型常量
|
||||
const (
|
||||
AssetAuditOperatorTypeSystem = "system" // 系统任务
|
||||
AssetAuditOperatorTypeAdmin = "admin_user" // 平台/超管用户
|
||||
AssetAuditOperatorTypeAgent = "agent_user" // 代理用户
|
||||
AssetAuditOperatorTypeEnterprise = "enterprise_user" // 企业用户
|
||||
AssetAuditOperatorTypePersonal = "personal_customer" // 个人客户
|
||||
)
|
||||
|
||||
// 资产审计日志操作类型常量
|
||||
const (
|
||||
AssetAuditOpCardAllocate = "card_allocate" // 单卡分配
|
||||
AssetAuditOpCardRecall = "card_recall" // 单卡回收
|
||||
AssetAuditOpCardSeriesBinding = "card_series_binding" // 卡系列绑定
|
||||
AssetAuditOpCardPollingStatus = "card_polling_status" // 卡轮询状态更新
|
||||
AssetAuditOpCardRealnamePolicy = "card_realname_policy" // 卡实名策略更新
|
||||
AssetAuditOpCardRealnameStatus = "card_realname_status" // 卡实名状态更新
|
||||
AssetAuditOpCardDelete = "card_delete" // 删除卡
|
||||
AssetAuditOpCardBatchDelete = "card_batch_delete" // 批量删除卡
|
||||
AssetAuditOpCardManualStop = "card_manual_stop" // 手动停卡
|
||||
AssetAuditOpCardManualStart = "card_manual_start" // 手动复机
|
||||
AssetAuditOpCardAutoStop = "card_auto_stop" // 自动停卡
|
||||
AssetAuditOpCardAutoStart = "card_auto_start" // 自动复机
|
||||
AssetAuditOpDeviceDelete = "device_delete" // 删除设备
|
||||
AssetAuditOpDeviceAllocate = "device_allocate" // 设备分配
|
||||
AssetAuditOpDeviceRecall = "device_recall" // 设备回收
|
||||
AssetAuditOpDeviceSeriesBinding = "device_series_binding" // 设备系列绑定
|
||||
AssetAuditOpDeviceBindCard = "device_bind_card" // 设备绑卡
|
||||
AssetAuditOpDeviceUnbindCard = "device_unbind_card" // 设备解绑卡
|
||||
AssetAuditOpDeviceStop = "device_stop" // 设备停机
|
||||
AssetAuditOpDeviceStart = "device_start" // 设备复机
|
||||
AssetAuditOpDeviceSpeedLimit = "device_speed_limit" // 设备限速
|
||||
AssetAuditOpDeviceSetWiFi = "device_set_wifi" // 设备 WiFi 设置
|
||||
AssetAuditOpDeviceSwitchCard = "device_switch_card" // 设备切卡
|
||||
AssetAuditOpDeviceSwitchMode = "device_switch_mode" // 设备切卡模式
|
||||
AssetAuditOpDeviceReboot = "device_reboot" // 设备重启
|
||||
AssetAuditOpDeviceReset = "device_reset" // 设备恢复出厂
|
||||
AssetAuditOpAssetDeactivate = "asset_deactivate" // 资产停用
|
||||
AssetAuditOpAssetPollingStatus = "asset_polling_status" // 统一入口轮询状态更新
|
||||
AssetAuditOpAssetRealnamePolicy = "asset_realname_policy" // 统一入口实名策略更新
|
||||
AssetAuditOpDeviceImportTaskCreate = "device_import_task_create" // 设备导入任务创建
|
||||
AssetAuditOpIotCardImportTaskCreate = "iot_card_import_task_create" // 卡导入任务创建
|
||||
)
|
||||
|
||||
// 资产审计日志数据裁剪常量
|
||||
const (
|
||||
AssetAuditDataMaxBytes = 16 * 1024 // before/after 数据最大字节数
|
||||
AssetAuditPreviewMaxBytes = 2048 // 裁剪预览最大字节数
|
||||
)
|
||||
@@ -14,6 +14,8 @@ const (
|
||||
ContextKeyUserInfo = "user_info" // 完整的用户信息
|
||||
ContextKeyIP = "ip_address" // IP地址
|
||||
ContextKeyUserAgent = "user_agent" // User-Agent
|
||||
ContextKeyRequestPath = "request_path" // 请求路径
|
||||
ContextKeyRequestMethod = "request_method" // 请求方法
|
||||
ContextKeySubordinateShopIDs = "subordinate_shop_ids" // 下级店铺ID列表(代理用户预计算)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
||||
@@ -35,6 +36,19 @@ func Middleware() fiber.Handler {
|
||||
startTime := time.Now()
|
||||
c.Locals(constants.ContextKeyStartTime, startTime)
|
||||
|
||||
// 注入请求上下文,供 Service 层审计日志复用
|
||||
ctx := c.UserContext()
|
||||
if rid := c.Locals(constants.ContextKeyRequestID); rid != nil {
|
||||
if requestID, ok := rid.(string); ok && requestID != "" {
|
||||
ctx = context.WithValue(ctx, constants.ContextKeyRequestID, requestID)
|
||||
}
|
||||
}
|
||||
ctx = context.WithValue(ctx, constants.ContextKeyIP, c.IP())
|
||||
ctx = context.WithValue(ctx, constants.ContextKeyUserAgent, c.Get("User-Agent"))
|
||||
ctx = context.WithValue(ctx, constants.ContextKeyRequestPath, c.Path())
|
||||
ctx = context.WithValue(ctx, constants.ContextKeyRequestMethod, c.Method())
|
||||
c.SetUserContext(ctx)
|
||||
|
||||
// 获取请求 body(在 c.Next() 之前读取)
|
||||
requestBody := truncateBody(c.Body(), MaxBodyLogSize)
|
||||
|
||||
|
||||
@@ -132,6 +132,28 @@ func GetUserAgentFromContext(ctx context.Context) *string {
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRequestPathFromContext 从 context 中提取请求路径。
|
||||
func GetRequestPathFromContext(ctx context.Context) *string {
|
||||
if ctx == nil {
|
||||
return nil
|
||||
}
|
||||
if requestPath, ok := ctx.Value(constants.ContextKeyRequestPath).(string); ok {
|
||||
return &requestPath
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetRequestMethodFromContext 从 context 中提取请求方法。
|
||||
func GetRequestMethodFromContext(ctx context.Context) *string {
|
||||
if ctx == nil {
|
||||
return nil
|
||||
}
|
||||
if requestMethod, ok := ctx.Value(constants.ContextKeyRequestMethod).(string); ok {
|
||||
return &requestMethod
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetUserToFiberContext 将用户信息设置到 Fiber context 的 Locals 中
|
||||
// 同时也设置到标准 context 中,便于 GORM 查询使用
|
||||
func SetUserToFiberContext(c *fiber.Ctx, info *UserContextInfo) {
|
||||
|
||||
@@ -57,7 +57,7 @@ func BuildDocHandlers() *bootstrap.Handlers {
|
||||
PollingAlert: admin.NewPollingAlertHandler(nil),
|
||||
PollingCleanup: admin.NewPollingCleanupHandler(nil),
|
||||
PollingManualTrigger: admin.NewPollingManualTriggerHandler(nil),
|
||||
Asset: admin.NewAssetHandler(nil, nil, nil, nil, nil),
|
||||
Asset: admin.NewAssetHandler(nil, nil, nil, nil, nil, nil),
|
||||
AssetLifecycle: admin.NewAssetLifecycleHandler(nil),
|
||||
AssetWallet: admin.NewAssetWalletHandler(nil),
|
||||
WechatConfig: admin.NewWechatConfigHandler(nil),
|
||||
|
||||
@@ -19,6 +19,7 @@ type OrderExpirer interface {
|
||||
|
||||
// WorkerStores Worker 侧所有 Store 的集合
|
||||
type WorkerStores struct {
|
||||
AssetOperationLog *postgres.AssetOperationLogStore
|
||||
IotCardImportTask *postgres.IotCardImportTaskStore
|
||||
IotCard *postgres.IotCardStore
|
||||
DeviceImportTask *postgres.DeviceImportTaskStore
|
||||
|
||||
Reference in New Issue
Block a user