作者 yangfu

feat: add blacklist to abort edit operate

@@ -18,3 +18,6 @@ STARROCKS_USER = root @@ -18,3 +18,6 @@ STARROCKS_USER = root
18 STARROCKS_PASSWORD = eagle1010 18 STARROCKS_PASSWORD = eagle1010
19 STARROCKS_HOST = 220.250.41.79 19 STARROCKS_HOST = 220.250.41.79
20 STARROCKS_PORT = 9030 20 STARROCKS_PORT = 9030
  21 +
  22 +BLACK_LIST_USER = 0
  23 +BLACK_LIST_COMPANY = 1612991734952759296
@@ -113,6 +113,10 @@ spec: @@ -113,6 +113,10 @@ spec:
113 value: "root" 113 value: "root"
114 - name: STARROCKS_PASSWORD 114 - name: STARROCKS_PASSWORD
115 value: "eagle1010" 115 value: "eagle1010"
  116 + - name: BLACK_LIST_USER
  117 + value: "1"
  118 + - name: BLACK_LIST_COMPANY
  119 + value: "1646025721363042304"
116 volumes: 120 volumes:
117 - name: accesslogs 121 - name: accesslogs
118 emptyDir: {} 122 emptyDir: {}
@@ -15,7 +15,7 @@ var PPROF_ON = true @@ -15,7 +15,7 @@ var PPROF_ON = true
15 //天联共创基础模块 15 //天联共创基础模块
16 //var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com" 16 //var ALLIED_CREATION_BASIC_HOST = "http://localhost:8080" //"http://allied-creation-basic-dev.fjmaimaimai.com"
17 17
18 -//天联共创用户模块 18 +// 天联共创用户模块
19 var ALLIED_CREATION_USER_HOST = "http://localhost:8081" //"http://allied-creation-user-dev.fjmaimaimai.com" 19 var ALLIED_CREATION_USER_HOST = "http://localhost:8081" //"http://allied-creation-user-dev.fjmaimaimai.com"
20 20
21 var MMM_BYTE_BANK_HOST = "http://220.250.41.79:8301" 21 var MMM_BYTE_BANK_HOST = "http://220.250.41.79:8301"
@@ -26,6 +26,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303" @@ -26,6 +26,9 @@ var BYTE_CORE_HOST = "http://192.168.100.34:8303"
26 26
27 var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com" 27 var AUTH_SERVER_HOST = "http://digital-platform-dev.fjmaimaimai.com"
28 28
  29 +var BlacklistUser int64
  30 +var BlackListCompany int64
  31 +
29 //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384} 32 //var CUSTOMER_ACCOUNT = []int64{3129687560814592, 3129687690100739, 3492238958608384}
30 33
31 //const CUSTOMER_ACCOUNT_DELIMITER = "," 34 //const CUSTOMER_ACCOUNT_DELIMITER = ","
@@ -49,4 +52,7 @@ func init() { @@ -49,4 +52,7 @@ func init() {
49 SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV) 52 SERVICE_NAME = fmt.Sprintf("%v-%v", SERVICE_NAME, SERVICE_ENV)
50 PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON) 53 PPROF_ON = Configurator.DefaultBool("PPROF_ON", PPROF_ON)
51 CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV 54 CACHE_PREFIX = SERVICE_NAME + ":" + SERVICE_ENV
  55 +
  56 + BlacklistUser = Configurator.DefaultInt64("BLACK_LIST_USER", BlacklistUser)
  57 + BlackListCompany = Configurator.DefaultInt64("BLACK_LIST_COMPANY", BlackListCompany)
52 } 58 }
@@ -272,6 +272,20 @@ func RoundFieldValue(f *Field, v string) string { @@ -272,6 +272,20 @@ func RoundFieldValue(f *Field, v string) string {
272 } 272 }
273 return utils.AssertString(fv) //fmt.Sprintf("%v", fv) 273 return utils.AssertString(fv) //fmt.Sprintf("%v", fv)
274 } 274 }
  275 + if f.SQLType == Datetime.ToString() {
  276 + fv, err := xtime.Parse(v)
  277 + if err != nil {
  278 + return v
  279 + }
  280 + return fv.Format("2006-01-02 15:04:05")
  281 + }
  282 + if f.SQLType == Date.ToString() {
  283 + fv, err := xtime.Parse(v)
  284 + if err != nil {
  285 + return v
  286 + }
  287 + return fv.Format("2006-01-02")
  288 + }
275 return v 289 return v
276 //if f.SQLType != DECIMALV2.ToString() { 290 //if f.SQLType != DECIMALV2.ToString() {
277 // return v 291 // return v
@@ -78,7 +78,7 @@ func (ptr *FlushDataTableService) flushSourceFile(ctx *domain.Context, table *do @@ -78,7 +78,7 @@ func (ptr *FlushDataTableService) flushSourceFile(ctx *domain.Context, table *do
78 if file, err = fileRepository.Save(file); err != nil { 78 if file, err = fileRepository.Save(file); err != nil {
79 return err 79 return err
80 } 80 }
81 - _, files, err := fileRepository.Find(map[string]interface{}{"context": ctx, "sourceFileId": sourceFile.FileId, "fileType": domain.VerifiedFile.ToString(), "notInFileIds": []int{file.FileId}}) 81 + _, files, err := fileRepository.Find(map[string]interface{}{"context": ctx, "equalFileName": sourceFile.FileInfo.Name, "fileType": domain.VerifiedFile.ToString(), "notInFileIds": []int{file.FileId}})
82 if err != nil { 82 if err != nil {
83 return err 83 return err
84 } 84 }
@@ -144,6 +144,9 @@ func (repository *FileRepository) Find(queryOptions map[string]interface{}) (int @@ -144,6 +144,9 @@ func (repository *FileRepository) Find(queryOptions map[string]interface{}) (int
144 if v, ok := queryOptions["updatedAtEnd"]; ok && !v.(time.Time).IsZero() { 144 if v, ok := queryOptions["updatedAtEnd"]; ok && !v.(time.Time).IsZero() {
145 query.Where(`updated_at<?`, v.(time.Time)) 145 query.Where(`updated_at<?`, v.(time.Time))
146 } 146 }
  147 + if v, ok := queryOptions["equalFileName"]; ok && len(v.(string)) > 0 {
  148 + query.Where(`file_info->>'name' = ?`, v)
  149 + }
147 query.SetOffsetAndLimit(20) 150 query.SetOffsetAndLimit(20)
148 query.SetOrderDirect("updated_at", "DESC") 151 query.SetOrderDirect("updated_at", "DESC")
149 if count, err := query.SelectAndCount(); err != nil { 152 if count, err := query.SelectAndCount(); err != nil {
@@ -7,6 +7,7 @@ import ( @@ -7,6 +7,7 @@ import (
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/domain" 9 "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"
10 "net/http" 11 "net/http"
11 "os" 12 "os"
12 "strconv" 13 "strconv"
@@ -52,6 +53,7 @@ func init() { @@ -52,6 +53,7 @@ func init() {
52 53
53 web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors()) 54 web.InsertFilter("/*", web.BeforeRouter, filters.AllowCors())
54 web.InsertFilter("/*", web.BeforeRouter, JwtFilter()) 55 web.InsertFilter("/*", web.BeforeRouter, JwtFilter())
  56 + web.InsertFilter("/*", web.BeforeExec, controllers.BlacklistFilter(controllers.BlacklistRouters))
55 web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger) 57 web.InsertFilter("/*", web.BeforeExec, CreateRequestLogFilter(true)) // filters.CreateRequstLogFilter(Logger)
56 web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false)) 58 web.InsertFilter("/*", web.AfterExec, filters.CreateResponseLogFilter(Logger), web.WithReturnOnOutput(false))
57 } 59 }
@@ -9,7 +9,9 @@ import ( @@ -9,7 +9,9 @@ import (
9 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/authlib" 9 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/authlib"
10 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache" 10 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/cache"
11 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log" 11 "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/log"
  12 + "net/http"
12 "strconv" 13 "strconv"
  14 + "strings"
13 ) 15 )
14 16
15 func ResponseGrid(c beego.BaseController, total int64, data interface{}, err error) { 17 func ResponseGrid(c beego.BaseController, total int64, data interface{}, err error) {
@@ -94,3 +96,74 @@ func header(c beego.BaseController, key string) int { @@ -94,3 +96,74 @@ func header(c beego.BaseController, key string) int {
94 } 96 }
95 return res 97 return res
96 } 98 }
  99 +
  100 +var BlacklistRouters = map[string]bool{
  101 + "/data/files": true,
  102 + "/data/edit-data-table": true,
  103 + "/data/flush-data-table": true,
  104 + "/data/generate-main-table": true,
  105 + "/data/append-data-to-table": true,
  106 + "/data/tables/copy-data-table": true,
  107 + "/data/tables/apply-on": true,
  108 + "/data/tables/add-sub-table": true,
  109 + "/data/tables/row-edit": true,
  110 + "/data/mapping-rules": true,
  111 +
  112 + "/data/query-sets": true,
  113 + "/data/query-sets/copy": true,
  114 + "/data/query-sets/move": true,
  115 + "/data/query-sets/rename": true,
  116 + "/data/query-sets/change-status": true,
  117 +
  118 + "/data/query-sets/formula": true,
  119 + "/data/query-sets/formula/change-status": true,
  120 + "/data/query-sets/formula/move": true,
  121 + "/data/query-sets/formula/copy": true,
  122 + "/data/query-sets/formula/rename": true,
  123 +}
  124 +
  125 +func BlacklistFilter(black map[string]bool) func(ctx *context.Context) {
  126 + return func(ctx *context.Context) {
  127 + if token := ctx.Input.GetData("UserToken"); token != nil {
  128 + userToken, ok := token.(*domain.UserToken)
  129 + if !ok {
  130 + return
  131 + }
  132 + if userToken.UserId > 0 && userToken.UserId == constant.BlacklistUser {
  133 + goto CheckBlackList
  134 + } else if userToken.CompanyId > 0 && userToken.UserId == 0 && userToken.CompanyId == constant.BlackListCompany {
  135 + goto CheckBlackList
  136 + } else {
  137 + return
  138 + }
  139 + CheckBlackList:
  140 + var notAllow = false
  141 + defer func() {
  142 + if notAllow {
  143 + ctx.Output.SetStatus(http.StatusOK)
  144 + ctx.Output.JSON(map[string]interface{}{
  145 + "msg": "测试账户不允许修改数据",
  146 + "code": 801,
  147 + "data": struct{}{},
  148 + }, false, false)
  149 + }
  150 + }()
  151 + if ctx.Request.Method == http.MethodDelete || ctx.Request.Method == http.MethodPut {
  152 + notAllow = true
  153 + return
  154 + }
  155 + url := ctx.Request.URL.Path
  156 + if v, ok := black[url]; ok && v {
  157 + notAllow = true
  158 + return
  159 + }
  160 + if strings.HasSuffix(url, "/") {
  161 + url = strings.TrimSuffix(url, "/")
  162 + }
  163 + if v, ok := black[url]; ok && v {
  164 + notAllow = true
  165 + return
  166 + }
  167 + }
  168 + }
  169 +}