chore: some optimize
# fix #3549 #3592 # add whitelist auth
正在显示
10 个修改的文件
包含
83 行增加
和
6 行删除
| @@ -19,3 +19,6 @@ CREATE INDEX IF NOT EXISTS idx_logs_company_id_created_at ON metadata.logs USING | @@ -19,3 +19,6 @@ CREATE INDEX IF NOT EXISTS idx_logs_company_id_created_at ON metadata.logs USING | ||
| 19 | 19 | ||
| 20 | /*mapping_rules*/ | 20 | /*mapping_rules*/ |
| 21 | CREATE INDEX IF NOT EXISTS idx_mapping_rules_company_id_table_id_file_id ON metadata.mapping_rules USING btree((context->>'companyId'),table_id,file_id); | 21 | CREATE INDEX IF NOT EXISTS idx_mapping_rules_company_id_table_id_file_id ON metadata.mapping_rules USING btree((context->>'companyId'),table_id,file_id); |
| 22 | + | ||
| 23 | +/*query_sets*/ | ||
| 24 | +CREATE INDEX IF NOT EXISTS idx_query_sets_company_id_type_deleted_at ON metadata.query_sets USING btree((context->>'companyId'),type,deleted_at); |
| @@ -117,6 +117,8 @@ spec: | @@ -117,6 +117,8 @@ spec: | ||
| 117 | value: "1" | 117 | value: "1" |
| 118 | - name: BLACK_LIST_COMPANY | 118 | - name: BLACK_LIST_COMPANY |
| 119 | value: "1646025721363042304" | 119 | value: "1646025721363042304" |
| 120 | + - name: WHITE_LIST_USERS | ||
| 121 | + value: "0" | ||
| 120 | volumes: | 122 | volumes: |
| 121 | - name: accesslogs | 123 | - name: accesslogs |
| 122 | emptyDir: {} | 124 | emptyDir: {} |
| @@ -426,6 +426,15 @@ func (tableService *TableService) ApplyOn(ctx *domain.Context, cmd *command.Appl | @@ -426,6 +426,15 @@ func (tableService *TableService) ApplyOn(ctx *domain.Context, cmd *command.Appl | ||
| 426 | } else { | 426 | } else { |
| 427 | table.TableInfo.SetApplyOn(cmd.Module) | 427 | table.TableInfo.SetApplyOn(cmd.Module) |
| 428 | } | 428 | } |
| 429 | + if !ctx.Access() { | ||
| 430 | + for i := range cmd.Modules { | ||
| 431 | + // 字库应用于数控目前限制在3万条记录以内,在字库的应用于数控按钮上增加判断,如果超过3万条, | ||
| 432 | + // 错误提示:普通用户数据限制在3万条记录,如需使用更多数据,请联系管理员,需针对公司配置应用记录上限数值,未配置默认3万条 | ||
| 433 | + if cmd.Modules[i] == domain.ModuleDigitalCenter && table.RowCount > 30000 { | ||
| 434 | + return nil, factory.FastError(fmt.Errorf("普通用户数据限制在3万条记录,如需使用更多数据,请联系管理员,需针对公司配置应用记录上限数值,未配置默认3万条")) | ||
| 435 | + } | ||
| 436 | + } | ||
| 437 | + } | ||
| 429 | 438 | ||
| 430 | table, err = tableRepository.Save(table) | 439 | table, err = tableRepository.Save(table) |
| 431 | if err != nil { | 440 | if err != nil { |
| @@ -2,6 +2,8 @@ package constant | @@ -2,6 +2,8 @@ package constant | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | + "strconv" | ||
| 6 | + "strings" | ||
| 5 | ) | 7 | ) |
| 6 | 8 | ||
| 7 | var SERVICE_NAME = "character-library-metadata-bastion" | 9 | var SERVICE_NAME = "character-library-metadata-bastion" |
| @@ -26,8 +28,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" | @@ -26,8 +28,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" | ||
| 26 | 28 | ||
| 27 | var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com" | 29 | var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com" |
| 28 | 30 | ||
| 29 | -var BlacklistUser int64 | ||
| 30 | -var BlackListCompany int64 | 31 | +var BLACK_LIST_USER int64 |
| 32 | +var BLACK_LIST_COMPANY int64 | ||
| 33 | +var WHITE_LIST_USERS []int | ||
| 31 | 34 | ||
| 32 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} | 35 | //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} |
| 33 | 36 | ||
| @@ -53,6 +56,12 @@ func init() { | @@ -53,6 +56,12 @@ func init() { | ||
| 53 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) | 56 | PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) |
| 54 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV | 57 | CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV |
| 55 | 58 | ||
| 56 | - BlacklistUser = Configurator.DefaultInt64("BLACK_LIST_USER", BlacklistUser) | ||
| 57 | - BlackListCompany = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BlackListCompany) | 59 | + BLACK_LIST_USER = Configurator.DefaultInt64("BLACK_LIST_USER", BLACK_LIST_USER) |
| 60 | + BLACK_LIST_COMPANY = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BLACK_LIST_COMPANY) | ||
| 61 | + | ||
| 62 | + whiteListUsers := strings.Split(Configurator.DefaultString("WHITE_LIST_USERS", ""), ",") | ||
| 63 | + for _, userId := range whiteListUsers { | ||
| 64 | + v, _ := strconv.Atoi(userId) | ||
| 65 | + WHITE_LIST_USERS = append(WHITE_LIST_USERS, v) | ||
| 66 | + } | ||
| 58 | } | 67 | } |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | +import "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" | ||
| 4 | + | ||
| 3 | type Context struct { | 5 | type Context struct { |
| 4 | // 公司 | 6 | // 公司 |
| 5 | CompanyId int `json:"companyId"` | 7 | CompanyId int `json:"companyId"` |
| @@ -38,3 +40,12 @@ const ( | @@ -38,3 +40,12 @@ const ( | ||
| 38 | ContextWithLogLevel = "WithLogLevel" | 40 | ContextWithLogLevel = "WithLogLevel" |
| 39 | ContextWithLogMsg = "WithLogMsg" | 41 | ContextWithLogMsg = "WithLogMsg" |
| 40 | ) | 42 | ) |
| 43 | + | ||
| 44 | +func (c *Context) Access() bool { | ||
| 45 | + for _, userId := range constant.WHITE_LIST_USERS { | ||
| 46 | + if userId == c.OperatorId { | ||
| 47 | + return true | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + return false | ||
| 51 | +} |
| @@ -141,6 +141,11 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | @@ -141,6 +141,11 @@ func NewFormulaCalculate(table *domain.Table, queryComponent *domain.QueryCompon | ||
| 141 | if queryComponent.Formula != nil { | 141 | if queryComponent.Formula != nil { |
| 142 | formula := queryComponent.Formula | 142 | formula := queryComponent.Formula |
| 143 | res.DatabaseTableName = formula.TableFields[0].TableSqlName | 143 | res.DatabaseTableName = formula.TableFields[0].TableSqlName |
| 144 | + // TODO:支持常量 | ||
| 145 | + //res.DatabaseTableName = "" | ||
| 146 | + //if len(formula.TableFields) > 0 { | ||
| 147 | + // res.DatabaseTableName = formula.TableFields[0].TableSqlName | ||
| 148 | + //} | ||
| 144 | exprSql := formula.ExprSql | 149 | exprSql := formula.ExprSql |
| 145 | if queryComponent.Formula.MixTableModel() { | 150 | if queryComponent.Formula.MixTableModel() { |
| 146 | exprSql = queryComponent.Formula.Complete() | 151 | exprSql = queryComponent.Formula.Complete() |
| @@ -46,6 +46,17 @@ func (f *TemporaryFileInfo) SetFile(file *domain.File) *TemporaryFileInfo { | @@ -46,6 +46,17 @@ func (f *TemporaryFileInfo) SetFile(file *domain.File) *TemporaryFileInfo { | ||
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | func (f *TemporaryFileInfo) SetFields(fields []*domain.Field) *TemporaryFileInfo { | 48 | func (f *TemporaryFileInfo) SetFields(fields []*domain.Field) *TemporaryFileInfo { |
| 49 | + // 保留原有字段的类型(底层拆分的时候类型会变掉,无法处理,此处做特殊处理) | ||
| 50 | + for i := range fields { | ||
| 51 | + for j := range f.Fields { | ||
| 52 | + if f.Fields[j].Name == fields[i].Name { | ||
| 53 | + if f.Fields[j].SQLType != fields[i].SQLType { | ||
| 54 | + fields[i].SQLType = f.Fields[j].SQLType | ||
| 55 | + break | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + } | ||
| 49 | f.Fields = fields | 60 | f.Fields = fields |
| 50 | return f | 61 | return f |
| 51 | } | 62 | } |
| @@ -6,12 +6,14 @@ import ( | @@ -6,12 +6,14 @@ import ( | ||
| 6 | "github.com/beego/beego/v2/server/web" | 6 | "github.com/beego/beego/v2/server/web" |
| 7 | "github.com/beego/beego/v2/server/web/context" | 7 | "github.com/beego/beego/v2/server/web/context" |
| 8 | "github.com/linmadan/egglib-go/web/beego/filters" | 8 | "github.com/linmadan/egglib-go/web/beego/filters" |
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" | ||
| 9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
| 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" | 11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" |
| 11 | "net/http" | 12 | "net/http" |
| 12 | "os" | 13 | "os" |
| 13 | "strconv" | 14 | "strconv" |
| 14 | "strings" | 15 | "strings" |
| 16 | + "time" | ||
| 15 | 17 | ||
| 16 | . "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" | 18 | . "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" |
| 17 | _ "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/routers" | 19 | _ "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/routers" |
| @@ -53,9 +55,13 @@ func init() { | @@ -53,9 +55,13 @@ func init() { | ||
| 53 | 55 | ||
| 54 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) | 56 | web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) |
| 55 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) | 57 | web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) |
| 58 | + web.InsertFilter("/*", web.BeforeRouter, RequestCostBefore()) | ||
| 56 | web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters)) | 59 | web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters)) |
| 57 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) | 60 | web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) |
| 61 | + if constant.SERVICE_ENV == "dev" { //|| web.BConfig.RunMode =="test" | ||
| 58 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) | 62 | web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) |
| 63 | + } | ||
| 64 | + web.InsertFilter("/*", web.AfterExec, RequestCostAfter(150), web.WithReturnOnOutput(false)) | ||
| 59 | } | 65 | } |
| 60 | 66 | ||
| 61 | func CreateRequestLogFilter(console bool) func(ctx *context.Context) { | 67 | func CreateRequestLogFilter(console bool) func(ctx *context.Context) { |
| @@ -89,3 +95,23 @@ func JwtFilter() func(ctx *context.Context) { | @@ -89,3 +95,23 @@ func JwtFilter() func(ctx *context.Context) { | ||
| 89 | } | 95 | } |
| 90 | } | 96 | } |
| 91 | } | 97 | } |
| 98 | +func RequestCostBefore() func(ctx *context.Context) { | ||
| 99 | + return func(ctx *context.Context) { | ||
| 100 | + ctx.Input.SetData("cost-begin", time.Now().UnixMilli()) | ||
| 101 | + } | ||
| 102 | +} | ||
| 103 | + | ||
| 104 | +func RequestCostAfter(maxCost int64) func(ctx *context.Context) { | ||
| 105 | + return func(ctx *context.Context) { | ||
| 106 | + t := ctx.Input.GetData("cost-begin") | ||
| 107 | + if t != nil { | ||
| 108 | + costBegin := t.(int64) | ||
| 109 | + costEnd := time.Now().UnixMilli() | ||
| 110 | + cost := costEnd - costBegin | ||
| 111 | + if cost > 0 && maxCost > 0 && cost > maxCost { | ||
| 112 | + msg := fmt.Sprintf("beego | %v | %v | 耗时:%v \n %v", ctx.Input.Method(), ctx.Input.URL(), time.Duration(cost)*time.Millisecond, string(ctx.Input.RequestBody)) | ||
| 113 | + logs.Warn(msg) | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | +} |
| @@ -129,9 +129,9 @@ func BlacklistFilter(black map[string]bool) func(ctx *context.Context) { | @@ -129,9 +129,9 @@ func BlacklistFilter(black map[string]bool) func(ctx *context.Context) { | ||
| 129 | if !ok { | 129 | if !ok { |
| 130 | return | 130 | return |
| 131 | } | 131 | } |
| 132 | - if userToken.UserId > 0 && userToken.UserId == constant.BlacklistUser { | 132 | + if userToken.UserId > 0 && userToken.UserId == constant.BLACK_LIST_USER { |
| 133 | goto CheckBlackList | 133 | goto CheckBlackList |
| 134 | - } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BlackListCompany { | 134 | + } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BLACK_LIST_COMPANY { |
| 135 | goto CheckBlackList | 135 | goto CheckBlackList |
| 136 | } else { | 136 | } else { |
| 137 | return | 137 | return |
-
请 注册 或 登录 后发表评论