diff --git a/internal/dms/biz/cloudbeaver.go b/internal/dms/biz/cloudbeaver.go index 9e2e3c8c6..8b0a0ff8c 100644 --- a/internal/dms/biz/cloudbeaver.go +++ b/internal/dms/biz/cloudbeaver.go @@ -455,7 +455,7 @@ func (cu *CloudbeaverUsecase) GraphQLDistributor() echo.MiddlewareFunc { AuditSQLReq: cloudbeaver.AuditSQLReq{ InstanceType: dbService.DBType, ProjectId: dbService.ProjectUID, - RuleTemplateName: dbService.SQLEConfig.RuleTemplateName, + RuleTemplateName: dbService.SQLEConfig.SQLQueryConfig.RuleTemplateName, }, SQLEAddr: fmt.Sprintf("%s/v2/sql_audit", sqleUrl), AllowQueryWhenLessThanAuditLevel: dbService.GetAllowQueryWhenLessThanAuditLevel(), @@ -757,7 +757,10 @@ func (w *ResponseInterceptor) WriteHeader(code int) { } func (cu *CloudbeaverUsecase) isEnableSQLAudit(dbService *DBService) bool { - return dbService.SQLEConfig.SQLQueryConfig.AuditEnabled + if dbService.SQLEConfig == nil || dbService.SQLEConfig.SQLQueryConfig == nil { + return false + } + return dbService.SQLEConfig.AuditEnabled && dbService.SQLEConfig.SQLQueryConfig.AuditEnabled } func (cu *CloudbeaverUsecase) getDbService(ctx context.Context, params *graphql.RawParams) (*DBService, error) { diff --git a/internal/dms/biz/db_service.go b/internal/dms/biz/db_service.go index 69b7d1388..b81dcd4f1 100644 --- a/internal/dms/biz/db_service.go +++ b/internal/dms/biz/db_service.go @@ -133,7 +133,8 @@ func newDBService(args *BizDBServiceArgs) (*DBService, error) { BackupMaxRows: args.BackupMaxRows, } - if args.RuleTemplateName != "" { + if args.AuditEnabled { + dbService.SQLEConfig.AuditEnabled = args.AuditEnabled dbService.SQLEConfig.RuleTemplateID = args.RuleTemplateID dbService.SQLEConfig.RuleTemplateName = args.RuleTemplateName } @@ -717,6 +718,7 @@ func (d *DBServiceUsecase) UpdateDBServiceByArgs(ctx context.Context, dbServiceU ds.SQLEConfig = &SQLEConfig{} // 支持新增和更新sqleConfig,不允许删除sqle配置 if updateDBService.RuleTemplateName != "" { + ds.SQLEConfig.AuditEnabled = updateDBService.AuditEnabled ds.SQLEConfig.RuleTemplateID = updateDBService.RuleTemplateID ds.SQLEConfig.RuleTemplateName = updateDBService.RuleTemplateName } diff --git a/internal/dms/service/db_service.go b/internal/dms/service/db_service.go index d2edc97c8..6a81a3158 100644 --- a/internal/dms/service/db_service.go +++ b/internal/dms/service/db_service.go @@ -68,6 +68,7 @@ func (d *DMSService) UpdateDBService(ctx context.Context, req *dmsV2.UpdateDBSer sqleConfig := req.DBService.SQLEConfig if sqleConfig != nil { + args.AuditEnabled = sqleConfig.AuditEnabled args.RuleTemplateName = sqleConfig.RuleTemplateName args.RuleTemplateID = sqleConfig.RuleTemplateID if sqleConfig.SQLQueryConfig != nil { @@ -76,6 +77,8 @@ func (d *DMSService) UpdateDBService(ctx context.Context, req *dmsV2.UpdateDBSer QueryTimeoutSecond: sqleConfig.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: sqleConfig.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: string(sqleConfig.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel), + RuleTemplateID: sqleConfig.SQLQueryConfig.RuleTemplateID, + RuleTemplateName: sqleConfig.SQLQueryConfig.RuleTemplateName, } } } @@ -273,6 +276,7 @@ func (d *DMSService) AddDBService(ctx context.Context, req *dmsV1.AddDBServiceRe sqleConfig := req.DBService.SQLEConfig if sqleConfig != nil { + args.AuditEnabled = sqleConfig.AuditEnabled args.RuleTemplateName = sqleConfig.RuleTemplateName args.RuleTemplateID = sqleConfig.RuleTemplateID if sqleConfig.SQLQueryConfig != nil { @@ -281,6 +285,8 @@ func (d *DMSService) AddDBService(ctx context.Context, req *dmsV1.AddDBServiceRe QueryTimeoutSecond: sqleConfig.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: sqleConfig.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: string(sqleConfig.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel), + RuleTemplateID: sqleConfig.SQLQueryConfig.RuleTemplateID, + RuleTemplateName: sqleConfig.SQLQueryConfig.RuleTemplateName, } } } @@ -334,6 +340,7 @@ func (d *DMSService) AddDBServiceV2(ctx context.Context, req *dmsV2.AddDBService sqleConfig := req.DBService.SQLEConfig if sqleConfig != nil { + args.AuditEnabled = sqleConfig.AuditEnabled args.RuleTemplateName = sqleConfig.RuleTemplateName args.RuleTemplateID = sqleConfig.RuleTemplateID if sqleConfig.SQLQueryConfig != nil { @@ -342,6 +349,8 @@ func (d *DMSService) AddDBServiceV2(ctx context.Context, req *dmsV2.AddDBService QueryTimeoutSecond: sqleConfig.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: sqleConfig.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: string(sqleConfig.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel), + RuleTemplateID: sqleConfig.SQLQueryConfig.RuleTemplateID, + RuleTemplateName: sqleConfig.SQLQueryConfig.RuleTemplateName, } } } @@ -403,6 +412,7 @@ func (d *DMSService) convertBizDBServiceArgs2ImportDBService(dbs []*biz.BizDBSer Source: u.Source, ProjectUID: u.ProjectUID, SQLEConfig: &dmsCommonV1.SQLEConfig{ + AuditEnabled: u.AuditEnabled, RuleTemplateName: u.RuleTemplateName, RuleTemplateID: u.RuleTemplateID, SQLQueryConfig: nil, @@ -431,6 +441,8 @@ func (d *DMSService) convertBizDBServiceArgs2ImportDBService(dbs []*biz.BizDBSer QueryTimeoutSecond: u.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: u.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: dmsCommonV1.SQLAllowQueryAuditLevel(u.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel), + RuleTemplateID: u.SQLQueryConfig.RuleTemplateID, + RuleTemplateName: u.SQLQueryConfig.RuleTemplateName, } } } @@ -480,6 +492,7 @@ func (d *DMSService) convertImportDBService2BizDBService(ctx context.Context, im if u.SQLEConfig != nil { sqlConfig := &biz.SQLEConfig{ + AuditEnabled: u.SQLEConfig.AuditEnabled, RuleTemplateName: u.SQLEConfig.RuleTemplateName, RuleTemplateID: u.SQLEConfig.RuleTemplateID, SQLQueryConfig: &biz.SQLQueryConfig{}, @@ -489,6 +502,8 @@ func (d *DMSService) convertImportDBService2BizDBService(ctx context.Context, im sqlConfig.SQLQueryConfig.AuditEnabled = u.SQLEConfig.SQLQueryConfig.AuditEnabled sqlConfig.SQLQueryConfig.MaxPreQueryRows = u.SQLEConfig.SQLQueryConfig.MaxPreQueryRows sqlConfig.SQLQueryConfig.QueryTimeoutSecond = u.SQLEConfig.SQLQueryConfig.QueryTimeoutSecond + sqlConfig.SQLQueryConfig.RuleTemplateID = u.SQLEConfig.SQLQueryConfig.RuleTemplateID + sqlConfig.SQLQueryConfig.RuleTemplateName = u.SQLEConfig.SQLQueryConfig.RuleTemplateName } ret[i].SQLEConfig = sqlConfig } @@ -670,6 +685,7 @@ func (d *DMSService) ListDBServices(ctx context.Context, req *dmsCommonV2.ListDB if u.SQLEConfig != nil { sqlConfig := &dmsCommonV1.SQLEConfig{ + AuditEnabled: u.SQLEConfig.AuditEnabled, RuleTemplateName: u.SQLEConfig.RuleTemplateName, RuleTemplateID: u.SQLEConfig.RuleTemplateID, SQLQueryConfig: &dmsCommonV1.SQLQueryConfig{}, @@ -679,6 +695,8 @@ func (d *DMSService) ListDBServices(ctx context.Context, req *dmsCommonV2.ListDB sqlConfig.SQLQueryConfig.AuditEnabled = u.SQLEConfig.SQLQueryConfig.AuditEnabled sqlConfig.SQLQueryConfig.MaxPreQueryRows = u.SQLEConfig.SQLQueryConfig.MaxPreQueryRows sqlConfig.SQLQueryConfig.QueryTimeoutSecond = u.SQLEConfig.SQLQueryConfig.QueryTimeoutSecond + sqlConfig.SQLQueryConfig.RuleTemplateID = u.SQLEConfig.SQLQueryConfig.RuleTemplateID + sqlConfig.SQLQueryConfig.RuleTemplateName = u.SQLEConfig.SQLQueryConfig.RuleTemplateName } ret[i].SQLEConfig = sqlConfig } diff --git a/internal/dms/service/db_service_sync_task.go b/internal/dms/service/db_service_sync_task.go index 87c2c935d..31a32ba1f 100644 --- a/internal/dms/service/db_service_sync_task.go +++ b/internal/dms/service/db_service_sync_task.go @@ -35,6 +35,7 @@ func toBizDBServiceSyncTask(syncTask *v1.DBServiceSyncTask) *biz.DBServiceSyncTa } if syncTask.SQLEConfig != nil { ret.SQLEConfig = &biz.SQLEConfig{ + AuditEnabled: syncTask.SQLEConfig.AuditEnabled, RuleTemplateName: syncTask.SQLEConfig.RuleTemplateName, RuleTemplateID: syncTask.SQLEConfig.RuleTemplateID, } @@ -44,6 +45,8 @@ func toBizDBServiceSyncTask(syncTask *v1.DBServiceSyncTask) *biz.DBServiceSyncTa QueryTimeoutSecond: syncTask.SQLEConfig.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: syncTask.SQLEConfig.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: string(syncTask.SQLEConfig.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel), + RuleTemplateID: syncTask.SQLEConfig.SQLQueryConfig.RuleTemplateID, + RuleTemplateName: syncTask.SQLEConfig.SQLQueryConfig.RuleTemplateName, } } } @@ -101,6 +104,7 @@ func (d *DMSService) buildReplySqleConfig(params *biz.SQLEConfig) *dmsCommonV1.S } sqlConfig := &dmsCommonV1.SQLEConfig{ + AuditEnabled: params.AuditEnabled, RuleTemplateName: params.RuleTemplateName, RuleTemplateID: params.RuleTemplateID, SQLQueryConfig: &dmsCommonV1.SQLQueryConfig{}, @@ -110,6 +114,8 @@ func (d *DMSService) buildReplySqleConfig(params *biz.SQLEConfig) *dmsCommonV1.S sqlConfig.SQLQueryConfig.AuditEnabled = params.SQLQueryConfig.AuditEnabled sqlConfig.SQLQueryConfig.MaxPreQueryRows = params.SQLQueryConfig.MaxPreQueryRows sqlConfig.SQLQueryConfig.QueryTimeoutSecond = params.SQLQueryConfig.QueryTimeoutSecond + sqlConfig.SQLQueryConfig.RuleTemplateID = params.SQLQueryConfig.RuleTemplateID + sqlConfig.SQLQueryConfig.RuleTemplateName = params.SQLQueryConfig.RuleTemplateName } return sqlConfig diff --git a/internal/dms/storage/convert.go b/internal/dms/storage/convert.go index bb9a309d3..75a52a846 100644 --- a/internal/dms/storage/convert.go +++ b/internal/dms/storage/convert.go @@ -3,11 +3,12 @@ package storage import ( "database/sql" "fmt" - v1 "github.com/actiontech/dms/api/dms/service/v1" "net/url" "strings" "time" + v1 "github.com/actiontech/dms/api/dms/service/v1" + "github.com/actiontech/dms/internal/dms/biz" "github.com/actiontech/dms/internal/dms/storage/model" "github.com/labstack/echo/v4/middleware" @@ -65,6 +66,7 @@ func convertBizDBService(ds *biz.DBService) (*model.DBService, error) { if ds.SQLEConfig != nil { dbService.ExtraParameters = model.ExtraParameters{ SqleConfig: &model.SQLEConfig{ + AuditEnabled: ds.SQLEConfig.AuditEnabled, RuleTemplateName: ds.SQLEConfig.RuleTemplateName, RuleTemplateID: ds.SQLEConfig.RuleTemplateID, }, @@ -76,6 +78,8 @@ func convertBizDBService(ds *biz.DBService) (*model.DBService, error) { AuditEnabled: sqleQueryConfig.AuditEnabled, MaxPreQueryRows: sqleQueryConfig.MaxPreQueryRows, QueryTimeoutSecond: sqleQueryConfig.QueryTimeoutSecond, + RuleTemplateName: sqleQueryConfig.RuleTemplateName, + RuleTemplateID: sqleQueryConfig.RuleTemplateID, } } } @@ -132,6 +136,7 @@ func convertModelDBService(ds *model.DBService) (*biz.DBService, error) { modelSqleConfig := ds.ExtraParameters.SqleConfig if modelSqleConfig != nil { dbService.SQLEConfig = &biz.SQLEConfig{} + dbService.SQLEConfig.AuditEnabled = modelSqleConfig.AuditEnabled dbService.SQLEConfig.RuleTemplateName = modelSqleConfig.RuleTemplateName dbService.SQLEConfig.RuleTemplateID = modelSqleConfig.RuleTemplateID sqleQueryConfig := modelSqleConfig.SqlQueryConfig @@ -141,6 +146,8 @@ func convertModelDBService(ds *model.DBService) (*biz.DBService, error) { AuditEnabled: sqleQueryConfig.AuditEnabled, MaxPreQueryRows: sqleQueryConfig.MaxPreQueryRows, QueryTimeoutSecond: sqleQueryConfig.QueryTimeoutSecond, + RuleTemplateName: sqleQueryConfig.RuleTemplateName, + RuleTemplateID: sqleQueryConfig.RuleTemplateID, } dbService.SQLEConfig.SQLQueryConfig = sqc } @@ -339,7 +346,7 @@ func convertModelMemberGroup(mg *model.MemberGroup) (*biz.MemberGroup, error) { opPermissions := make([]biz.OpPermission, 0) for _, permission := range mg.OpPermissions { - bizPermission, err:= convertModelOpPermission(&permission) + bizPermission, err := convertModelOpPermission(&permission) if err != nil { return nil, err } @@ -353,7 +360,7 @@ func convertModelMemberGroup(mg *model.MemberGroup) (*biz.MemberGroup, error) { Name: mg.Name, Users: users, RoleWithOpRanges: roles, - OpPermissions: opPermissions, + OpPermissions: opPermissions, }, nil } @@ -384,11 +391,11 @@ func convertModelRole(u *model.Role) (*biz.Role, error) { } return &biz.Role{ - Base: convertBase(u.Model), - UID: u.UID, - Name: u.Name, - Desc: u.Desc, - Stat: stat, + Base: convertBase(u.Model), + UID: u.UID, + Name: u.Name, + Desc: u.Desc, + Stat: stat, OpPermissions: opPermissions, }, nil } @@ -402,8 +409,8 @@ func convertBizOpPermission(u *biz.OpPermission) (*model.OpPermission, error) { Name: u.Name, Desc: u.Desc, RangeType: u.RangeType.String(), - Module: string(u.Module), - Service: string(u.Service), + Module: string(u.Module), + Service: string(u.Service), }, nil } @@ -414,8 +421,8 @@ func convertModelOpPermission(u *model.OpPermission) (*biz.OpPermission, error) Name: u.Name, Desc: u.Desc, RangeType: biz.OpRangeType(u.RangeType), - Module: biz.Module(u.Module), - Service: v1.Service(u.Service), + Module: biz.Module(u.Module), + Service: v1.Service(u.Service), }, nil } @@ -522,7 +529,7 @@ func convertModelMember(m *model.Member) (*biz.Member, error) { } opPermissions := make([]biz.OpPermission, 0) for _, permission := range m.OpPermissions { - bizPermission, err:= convertModelOpPermission(permission) + bizPermission, err := convertModelOpPermission(permission) if err != nil { return nil, err } @@ -1271,6 +1278,7 @@ func toModelDBServiceSyncTask(u *biz.DBServiceSyncTask) *model.DBServiceSyncTask } if u.SQLEConfig != nil { ret.ExtraParameters.SqleConfig = &model.SQLEConfig{ + AuditEnabled: u.SQLEConfig.AuditEnabled, RuleTemplateName: u.SQLEConfig.RuleTemplateName, RuleTemplateID: u.SQLEConfig.RuleTemplateID, } @@ -1280,6 +1288,8 @@ func toModelDBServiceSyncTask(u *biz.DBServiceSyncTask) *model.DBServiceSyncTask QueryTimeoutSecond: u.SQLEConfig.SQLQueryConfig.QueryTimeoutSecond, AuditEnabled: u.SQLEConfig.SQLQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: u.SQLEConfig.SQLQueryConfig.AllowQueryWhenLessThanAuditLevel, + RuleTemplateName: u.SQLEConfig.SQLQueryConfig.RuleTemplateName, + RuleTemplateID: u.SQLEConfig.SQLQueryConfig.RuleTemplateID, } } } @@ -1304,6 +1314,7 @@ func toBizDBServiceSyncTask(m *model.DBServiceSyncTask) *biz.DBServiceSyncTask { } if m.ExtraParameters.SqleConfig != nil { ret.SQLEConfig = &biz.SQLEConfig{ + AuditEnabled: m.ExtraParameters.SqleConfig.AuditEnabled, RuleTemplateName: m.ExtraParameters.SqleConfig.RuleTemplateName, RuleTemplateID: m.ExtraParameters.SqleConfig.RuleTemplateID, } @@ -1313,6 +1324,8 @@ func toBizDBServiceSyncTask(m *model.DBServiceSyncTask) *biz.DBServiceSyncTask { QueryTimeoutSecond: m.ExtraParameters.SqleConfig.SqlQueryConfig.QueryTimeoutSecond, AuditEnabled: m.ExtraParameters.SqleConfig.SqlQueryConfig.AuditEnabled, AllowQueryWhenLessThanAuditLevel: m.ExtraParameters.SqleConfig.SqlQueryConfig.AllowQueryWhenLessThanAuditLevel, + RuleTemplateName: m.ExtraParameters.SqleConfig.SqlQueryConfig.RuleTemplateName, + RuleTemplateID: m.ExtraParameters.SqleConfig.SqlQueryConfig.RuleTemplateID, } } } diff --git a/internal/dms/storage/model/model.go b/internal/dms/storage/model/model.go index 5a95c8309..4e9d66adc 100644 --- a/internal/dms/storage/model/model.go +++ b/internal/dms/storage/model/model.go @@ -110,6 +110,7 @@ func (e *ExtraParameters) Scan(input interface{}) error { } type SQLEConfig struct { + AuditEnabled bool `json:"audit_enabled"` RuleTemplateID string `json:"rule_template_id"` RuleTemplateName string `json:"rule_template_name"` SqlQueryConfig *SqlQueryConfig `json:"sql_query_config"` @@ -119,6 +120,8 @@ type SqlQueryConfig struct { QueryTimeoutSecond int `json:"query_timeout_second"` AuditEnabled bool `json:"audit_enabled"` AllowQueryWhenLessThanAuditLevel string `json:"allow_query_when_less_than_audit_level"` + RuleTemplateID string `json:"rule_template_id"` + RuleTemplateName string `json:"rule_template_name"` } type User struct { diff --git a/internal/pkg/locale/active.en.toml b/internal/pkg/locale/active.en.toml index af7b7737d..284bbfdd3 100644 --- a/internal/pkg/locale/active.en.toml +++ b/internal/pkg/locale/active.en.toml @@ -31,6 +31,7 @@ DBServicePort = "DB instance port" DBServiceProblem = "Problem" DBServiceProjName = "Project name (Existing in the platform)" DBServiceRuleTemplateName = "Audit rule template (Existing in the project)" +DBServiceSQLQueryRuleTemplateName = "SQL Workbench audit rule template (need to fill out the audit rule template first)" DBServiceSyncExpand = "DB instance synchronization expansion service" DBServiceSyncVersion = "Version (Supports DMP5.23.04.0 and above)" DBServiceUser = "DB instance connection user" @@ -67,6 +68,7 @@ IDBPCErrProjNonExist = "Project does not exist" IDBPCErrProjNotActive = "Project status is abnormal" IDBPCErrProjNotAllowed = "Project is not in operation" IDBPCErrRuleTemplateInvalid = "Audit rule template does not exist or is incompatible with the db instance type" +IDBPCErrSQLQueryRuleTemplateInvalid = "SQL Workbench audit rule template does not exist or is incompatible with the db instance type" LicenseAuthorizedDurationDay = "Authorized days" LicenseDmsVersion = "DMS Version" LicenseDurationOfRunning = "Running days" diff --git a/internal/pkg/locale/active.zh.toml b/internal/pkg/locale/active.zh.toml index 4b97aa0b1..c78295192 100644 --- a/internal/pkg/locale/active.zh.toml +++ b/internal/pkg/locale/active.zh.toml @@ -31,6 +31,7 @@ DBServicePort = "数据源端口" DBServiceProblem = "问题" DBServiceProjName = "所属项目(平台已有的项目名称)" DBServiceRuleTemplateName = "审核规则模板(项目已有的规则模板)" +DBServiceSQLQueryRuleTemplateName = "工作台操作审核规则模板(需要先填写审核规则模板)" DBServiceSyncExpand = "数据源同步扩展服务" DBServiceSyncVersion = "版本(支持DMP5.23.04.0及以上版本)" DBServiceUser = "数据源连接用户" @@ -67,6 +68,7 @@ IDBPCErrProjNonExist = "所属项目不存在" IDBPCErrProjNotActive = "所属项目状态异常" IDBPCErrProjNotAllowed = "所属项目不是操作中的项目" IDBPCErrRuleTemplateInvalid = "审核规则模板不存在或数据源类型不匹配" +IDBPCErrSQLQueryRuleTemplateInvalid = "工作台操作审核规则模板不存在或数据源类型不匹配" LicenseAuthorizedDurationDay = "授权运行时长(天)" LicenseDmsVersion = "DMS版本" LicenseDurationOfRunning = "已运行时长(天)" diff --git a/internal/pkg/locale/message_zh.go b/internal/pkg/locale/message_zh.go index cda9e0cc7..c29d60ef7 100644 --- a/internal/pkg/locale/message_zh.go +++ b/internal/pkg/locale/message_zh.go @@ -24,41 +24,41 @@ var ( // OpPermission var ( - NameOpPermissionCreateProject = &i18n.Message{ID: "NameOpPermissionCreateProject", Other: "项目总监"} - NameOpPermissionProjectAdmin = &i18n.Message{ID: "NameOpPermissionProjectAdmin", Other: "项目管理"} - NameOpPermissionCreateWorkflow = &i18n.Message{ID: "NameOpPermissionCreateWorkflow", Other: "创建上线工单"} - NameOpPermissionAuditWorkflow = &i18n.Message{ID: "NameOpPermissionAuditWorkflow", Other: "审批上线工单"} - NameOpPermissionAuthDBServiceData = &i18n.Message{ID: "NameOpPermissionAuthDBServiceData", Other: "账号管理"} - NameOpPermissionExecuteWorkflow = &i18n.Message{ID: "NameOpPermissionExecuteWorkflow", Other: "执行上线工单"} - NameOpPermissionViewOthersWorkflow = &i18n.Message{ID: "NameOpPermissionViewOthersWorkflow", Other: "查看所有工单"} - NameOpPermissionViewOthersAuditPlan = &i18n.Message{ID: "NameOpPermissionViewOthersAuditPlan", Other: "访问所有管控SQL"} - NameOpPermissionSaveAuditPlan = &i18n.Message{ID: "NameOpPermissionSaveAuditPlan", Other: "配置SQL管控"} - NameOpPermissionSQLQuery = &i18n.Message{ID: "NameOpPermissionSQLQuery", Other: "SQL工作台操作权限"} - NameOpPermissionExportApprovalReject = &i18n.Message{ID: "NameOpPermissionExportApprovalReject", Other: "审批导出工单"} - NameOpPermissionExportCreate = &i18n.Message{ID: "NameOpPermissionExportCreate", Other: "创建导出工单"} - NameOpPermissionCreateOptimization = &i18n.Message{ID: "NameOpPermissionCreateOptimization", Other: "创建智能调优"} - NameOpPermissionGlobalManagement = &i18n.Message{ID: "NameOpPermissionGlobalManagement", Other: "系统管理员"} - NameOpPermissionGlobalView = &i18n.Message{ID: "NameOpPermissionGlobalView", Other: "审计管理员"} - NameOpPermissionViewOthersOptimization = &i18n.Message{ID: "NameOpPermissionViewOthersOptimization", Other: "查看他人创建的智能调优"} - NameOpPermissionCreatePipeline = &i18n.Message{ID: "NameOpPermissionCreatePipeline", Other: "流水线增删改"} - NameOpPermissionOrdinaryUser = &i18n.Message{ID: "NameOpPermissionOrdinaryUser", Other: "普通用户"} - NameOpPermissionViewOperationRecord = &i18n.Message{ID: "NameOpPermissionViewOperationRecord", Other: "查看所有操作记录"} - NameOpPermissionViewExportTask = &i18n.Message{ID: "NameOpPermissionViewExportTask", Other: "查看所有导出任务"} - NamePermissionViewQuickAuditRecord = &i18n.Message{ID: "NamePermissionViewQuickAuditRecord", Other: "查看所有快捷审核记录"} - NameOpPermissionViewIDEAuditRecord = &i18n.Message{ID: "NameOpPermissionViewIDEAuditRecord", Other: "查看所有IDE审核记录"} - NameOpPermissionViewOptimizationRecord = &i18n.Message{ID: "NameOpPermissionViewOptimizationRecord", Other: "查看所有优化记录"} - NameOpPermissionViewVersionManage = &i18n.Message{ID: "NameOpPermissionViewVersionManage", Other: "查看他人创建的版本记录"} - NameOpPermissionVersionManage = &i18n.Message{ID: "NameOpPermissionVersionManage", Other: "配置版本"} - NameOpPermissionViewPipeline = &i18n.Message{ID: "NameOpPermissionViewPipeline", Other: "查看所有流水线"} - NameOpPermissionManageProjectDataSource = &i18n.Message{ID: "NameOpPermissionManageProjectDataSource", Other: "管理项目数据源"} + NameOpPermissionCreateProject = &i18n.Message{ID: "NameOpPermissionCreateProject", Other: "项目总监"} + NameOpPermissionProjectAdmin = &i18n.Message{ID: "NameOpPermissionProjectAdmin", Other: "项目管理"} + NameOpPermissionCreateWorkflow = &i18n.Message{ID: "NameOpPermissionCreateWorkflow", Other: "创建上线工单"} + NameOpPermissionAuditWorkflow = &i18n.Message{ID: "NameOpPermissionAuditWorkflow", Other: "审批上线工单"} + NameOpPermissionAuthDBServiceData = &i18n.Message{ID: "NameOpPermissionAuthDBServiceData", Other: "账号管理"} + NameOpPermissionExecuteWorkflow = &i18n.Message{ID: "NameOpPermissionExecuteWorkflow", Other: "执行上线工单"} + NameOpPermissionViewOthersWorkflow = &i18n.Message{ID: "NameOpPermissionViewOthersWorkflow", Other: "查看所有工单"} + NameOpPermissionViewOthersAuditPlan = &i18n.Message{ID: "NameOpPermissionViewOthersAuditPlan", Other: "访问所有管控SQL"} + NameOpPermissionSaveAuditPlan = &i18n.Message{ID: "NameOpPermissionSaveAuditPlan", Other: "配置SQL管控"} + NameOpPermissionSQLQuery = &i18n.Message{ID: "NameOpPermissionSQLQuery", Other: "SQL工作台操作权限"} + NameOpPermissionExportApprovalReject = &i18n.Message{ID: "NameOpPermissionExportApprovalReject", Other: "审批导出工单"} + NameOpPermissionExportCreate = &i18n.Message{ID: "NameOpPermissionExportCreate", Other: "创建导出工单"} + NameOpPermissionCreateOptimization = &i18n.Message{ID: "NameOpPermissionCreateOptimization", Other: "创建智能调优"} + NameOpPermissionGlobalManagement = &i18n.Message{ID: "NameOpPermissionGlobalManagement", Other: "系统管理员"} + NameOpPermissionGlobalView = &i18n.Message{ID: "NameOpPermissionGlobalView", Other: "审计管理员"} + NameOpPermissionViewOthersOptimization = &i18n.Message{ID: "NameOpPermissionViewOthersOptimization", Other: "查看他人创建的智能调优"} + NameOpPermissionCreatePipeline = &i18n.Message{ID: "NameOpPermissionCreatePipeline", Other: "流水线增删改"} + NameOpPermissionOrdinaryUser = &i18n.Message{ID: "NameOpPermissionOrdinaryUser", Other: "普通用户"} + NameOpPermissionViewOperationRecord = &i18n.Message{ID: "NameOpPermissionViewOperationRecord", Other: "查看所有操作记录"} + NameOpPermissionViewExportTask = &i18n.Message{ID: "NameOpPermissionViewExportTask", Other: "查看所有导出任务"} + NamePermissionViewQuickAuditRecord = &i18n.Message{ID: "NamePermissionViewQuickAuditRecord", Other: "查看所有快捷审核记录"} + NameOpPermissionViewIDEAuditRecord = &i18n.Message{ID: "NameOpPermissionViewIDEAuditRecord", Other: "查看所有IDE审核记录"} + NameOpPermissionViewOptimizationRecord = &i18n.Message{ID: "NameOpPermissionViewOptimizationRecord", Other: "查看所有优化记录"} + NameOpPermissionViewVersionManage = &i18n.Message{ID: "NameOpPermissionViewVersionManage", Other: "查看他人创建的版本记录"} + NameOpPermissionVersionManage = &i18n.Message{ID: "NameOpPermissionVersionManage", Other: "配置版本"} + NameOpPermissionViewPipeline = &i18n.Message{ID: "NameOpPermissionViewPipeline", Other: "查看所有流水线"} + NameOpPermissionManageProjectDataSource = &i18n.Message{ID: "NameOpPermissionManageProjectDataSource", Other: "管理项目数据源"} NameOpPermissionManageAuditRuleTemplate = &i18n.Message{ID: "NameOpPermissionManageAuditRuleTemplate", Other: "管理审核规则模版"} NameOpPermissionManageApprovalTemplate = &i18n.Message{ID: "NameOpPermissionManageApprovalTemplate", Other: "管理审批流程模版'"} - NameOpPermissionManageMember = &i18n.Message{ID: "NameOpPermissionManageMember", Other: "管理成员与权限"} - NameOpPermissionPushRule = &i18n.Message{ID: "NameOpPermissionPushRule", Other: "管理推送规则"} - NameOpPermissionMangeAuditSQLWhiteList = &i18n.Message{ID: "NameOpPermissionMangeAuditSQLWhiteList", Other: "审核SQL例外"} + NameOpPermissionManageMember = &i18n.Message{ID: "NameOpPermissionManageMember", Other: "管理成员与权限"} + NameOpPermissionPushRule = &i18n.Message{ID: "NameOpPermissionPushRule", Other: "管理推送规则"} + NameOpPermissionMangeAuditSQLWhiteList = &i18n.Message{ID: "NameOpPermissionMangeAuditSQLWhiteList", Other: "审核SQL例外"} NameOpPermissionManageSQLMangeWhiteList = &i18n.Message{ID: "NameOpPermissionManageSQLMangeWhiteList", Other: "管控SQL例外"} - NameOpPermissionManageRoleMange = &i18n.Message{ID: "NameOpPermissionManageRoleMange", Other: "角色管理权限"} - NameOpPermissionDesensitization = &i18n.Message{ID: "NameOpPermissionDesensitization", Other: "脱敏规则配置权限"} + NameOpPermissionManageRoleMange = &i18n.Message{ID: "NameOpPermissionManageRoleMange", Other: "角色管理权限"} + NameOpPermissionDesensitization = &i18n.Message{ID: "NameOpPermissionDesensitization", Other: "脱敏规则配置权限"} DescOpPermissionGlobalManagement = &i18n.Message{ID: "DescOpPermissionGlobalManagement", Other: "具备系统最高权限,可进行系统配置、用户管理等操作"} DescOpPermissionGlobalView = &i18n.Message{ID: "DescOpPermissionGlobalView", Other: "负责系统操作审计、数据合规检查等工作"} @@ -110,34 +110,36 @@ var ( // DB service var ( - DBServiceDbName = &i18n.Message{ID: "DBServiceDbName", Other: "数据源名称"} - DBServiceProjName = &i18n.Message{ID: "DBServiceProjName", Other: "所属项目(平台已有的项目名称)"} - DBServiceEnvironmentTag = &i18n.Message{ID: "DBServiceEnvironmentTag", Other: "所属环境"} - DBServiceDesc = &i18n.Message{ID: "DBServiceDesc", Other: "数据源描述"} - DBServiceDbType = &i18n.Message{ID: "DBServiceDbType", Other: "数据源类型"} - DBServiceHost = &i18n.Message{ID: "DBServiceHost", Other: "数据源地址"} - DBServicePort = &i18n.Message{ID: "DBServicePort", Other: "数据源端口"} - DBServiceUser = &i18n.Message{ID: "DBServiceUser", Other: "数据源连接用户"} - DBServicePassword = &i18n.Message{ID: "DBServicePassword", Other: "数据源密码"} - DBServiceOracleService = &i18n.Message{ID: "DBServiceOracleService", Other: "服务名(Oracle需填)"} - DBServiceDB2DbName = &i18n.Message{ID: "DBServiceDB2DbName", Other: "数据库名(DB2需填)"} - DBServiceOpsTime = &i18n.Message{ID: "DBServiceOpsTime", Other: "运维时间(非必填,9:30-11:00;14:10-18:30)"} - DBServiceRuleTemplateName = &i18n.Message{ID: "DBServiceRuleTemplateName", Other: "审核规则模板(项目已有的规则模板)"} - DBServiceAuditLevel = &i18n.Message{ID: "DBServiceAuditLevel", Other: "工作台查询的最高审核等级[error|warn|notice|normal]"} - DBServiceProblem = &i18n.Message{ID: "DBServiceProblem", Other: "问题"} - - DBServiceNoProblem = &i18n.Message{ID: "DBServiceNoProblem", Other: "无"} - IDBPCErrMissingOrInvalidCols = &i18n.Message{ID: "IDBPCErrMissingOrInvalidCols", Other: "缺失或不规范的列:%s"} - IDBPCErrInvalidInput = &i18n.Message{ID: "IDBPCErrInvalidInput", Other: "若无特别说明每列均为必填"} - IDBPCErrProjNonExist = &i18n.Message{ID: "IDBPCErrProjNonExist", Other: "所属项目不存在"} - IDBPCErrProjNotActive = &i18n.Message{ID: "IDBPCErrProjNotActive", Other: "所属项目状态异常"} - IDBPCErrProjNotAllowed = &i18n.Message{ID: "IDBPCErrProjNotAllowed", Other: "所属项目不是操作中的项目"} - IDBPCErrOptTimeInvalid = &i18n.Message{ID: "IDBPCErrOptTimeInvalid", Other: "运维时间不规范"} - IDBPCErrDbTypeInvalid = &i18n.Message{ID: "IDBPCErrDbTypeInvalid", Other: "数据源类型不规范或对应插件未安装"} - IDBPCErrOracleServiceNameInvalid = &i18n.Message{ID: "IDBPCErrOracleServiceNameInvalid", Other: "Oracle服务名错误"} - IDBPCErrDB2DbNameInvalid = &i18n.Message{ID: "IDBPCErrDB2DbNameInvalid", Other: "DB2数据库名错误"} - IDBPCErrRuleTemplateInvalid = &i18n.Message{ID: "IDBPCErrRuleTemplateInvalid", Other: "审核规则模板不存在或数据源类型不匹配"} - IDBPCErrEnvironmentTagInvalid = &i18n.Message{ID: "IDBPCErrEnvironmentTagInvalid", Other: "项目环境标签检查错误或不存在"} + DBServiceDbName = &i18n.Message{ID: "DBServiceDbName", Other: "数据源名称"} + DBServiceProjName = &i18n.Message{ID: "DBServiceProjName", Other: "所属项目(平台已有的项目名称)"} + DBServiceEnvironmentTag = &i18n.Message{ID: "DBServiceEnvironmentTag", Other: "所属环境"} + DBServiceDesc = &i18n.Message{ID: "DBServiceDesc", Other: "数据源描述"} + DBServiceDbType = &i18n.Message{ID: "DBServiceDbType", Other: "数据源类型"} + DBServiceHost = &i18n.Message{ID: "DBServiceHost", Other: "数据源地址"} + DBServicePort = &i18n.Message{ID: "DBServicePort", Other: "数据源端口"} + DBServiceUser = &i18n.Message{ID: "DBServiceUser", Other: "数据源连接用户"} + DBServicePassword = &i18n.Message{ID: "DBServicePassword", Other: "数据源密码"} + DBServiceOracleService = &i18n.Message{ID: "DBServiceOracleService", Other: "服务名(Oracle需填)"} + DBServiceDB2DbName = &i18n.Message{ID: "DBServiceDB2DbName", Other: "数据库名(DB2需填)"} + DBServiceOpsTime = &i18n.Message{ID: "DBServiceOpsTime", Other: "运维时间(非必填,9:30-11:00;14:10-18:30)"} + DBServiceRuleTemplateName = &i18n.Message{ID: "DBServiceRuleTemplateName", Other: "审核规则模板(项目已有的规则模板)"} + DBServiceSQLQueryRuleTemplateName = &i18n.Message{ID: "DBServiceSQLQueryRuleTemplateName", Other: "工作台操作审核规则模板(需要先填写审核规则模板)"} + DBServiceAuditLevel = &i18n.Message{ID: "DBServiceAuditLevel", Other: "工作台查询的最高审核等级[error|warn|notice|normal]"} + DBServiceProblem = &i18n.Message{ID: "DBServiceProblem", Other: "问题"} + + DBServiceNoProblem = &i18n.Message{ID: "DBServiceNoProblem", Other: "无"} + IDBPCErrMissingOrInvalidCols = &i18n.Message{ID: "IDBPCErrMissingOrInvalidCols", Other: "缺失或不规范的列:%s"} + IDBPCErrInvalidInput = &i18n.Message{ID: "IDBPCErrInvalidInput", Other: "若无特别说明每列均为必填"} + IDBPCErrProjNonExist = &i18n.Message{ID: "IDBPCErrProjNonExist", Other: "所属项目不存在"} + IDBPCErrProjNotActive = &i18n.Message{ID: "IDBPCErrProjNotActive", Other: "所属项目状态异常"} + IDBPCErrProjNotAllowed = &i18n.Message{ID: "IDBPCErrProjNotAllowed", Other: "所属项目不是操作中的项目"} + IDBPCErrOptTimeInvalid = &i18n.Message{ID: "IDBPCErrOptTimeInvalid", Other: "运维时间不规范"} + IDBPCErrDbTypeInvalid = &i18n.Message{ID: "IDBPCErrDbTypeInvalid", Other: "数据源类型不规范或对应插件未安装"} + IDBPCErrOracleServiceNameInvalid = &i18n.Message{ID: "IDBPCErrOracleServiceNameInvalid", Other: "Oracle服务名错误"} + IDBPCErrDB2DbNameInvalid = &i18n.Message{ID: "IDBPCErrDB2DbNameInvalid", Other: "DB2数据库名错误"} + IDBPCErrRuleTemplateInvalid = &i18n.Message{ID: "IDBPCErrRuleTemplateInvalid", Other: "审核规则模板不存在或数据源类型不匹配"} + IDBPCErrSQLQueryRuleTemplateInvalid = &i18n.Message{ID: "IDBPCErrSQLQueryRuleTemplateInvalid", Other: "工作台操作审核规则模板不存在或数据源类型不匹配"} + IDBPCErrEnvironmentTagInvalid = &i18n.Message{ID: "IDBPCErrEnvironmentTagInvalid", Other: "项目环境标签检查错误或不存在"} ) // project