fix: 区服报表复用批量游戏权限校验
This commit is contained in:
@@ -17,7 +17,6 @@ func NewServerAnalysisRepo(data Provider) business.ServerAnalysisRepo {
|
||||
func serverReportQuery(db *gorm.DB, scope business.AnalyticsScope, f business.ServerAnalysisFilter, table string, mode int) *gorm.DB {
|
||||
q := ledgerScopeQuery(db, business.LedgerScope{Viewer: scope.Viewer, IncludeSub: scope.IncludeSub, Unrestricted: scope.Viewer.All}, business.LedgerFilter{Sources: f.Sources}, table)
|
||||
q = q.Where("r.stat_date >= ? AND r.stat_date <= ? AND r.dedup_mode=? AND r.server_num != ''", f.Begin, f.End, mode).Where("r.game_name IN ?", f.GameNames)
|
||||
q = q.Where("(r.source_db,r.game_id) IN (?)", approvedGamesQuery(db, scope.Viewer, f.Sources).Select("g.source_db,g.id"))
|
||||
if f.ServerNum != "" {
|
||||
q = q.Where("r.server_num=?", f.ServerNum)
|
||||
}
|
||||
@@ -88,6 +87,23 @@ func (r *serverAnalysisRepo) Aggregate(ctx context.Context, scope business.Analy
|
||||
row.Pay = po.Amount
|
||||
row.GameName = strings.TrimSpace(po.GameName)
|
||||
}
|
||||
gameSet := map[business.AnalyticsKey]bool{}
|
||||
for key := range rows {
|
||||
gameSet[business.AnalyticsKey{SourceDB: key.SourceDB, ID: key.GameID}] = true
|
||||
}
|
||||
gameKeys := make([]business.AnalyticsKey, 0, len(gameSet))
|
||||
for key := range gameSet {
|
||||
gameKeys = append(gameKeys, key)
|
||||
}
|
||||
allowed, err := approvedGameKeys(db, scope.Viewer, f.Sources, gameKeys)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for key := range rows {
|
||||
if !allowed[business.AnalyticsKey{SourceDB: key.SourceDB, ID: key.GameID}] {
|
||||
delete(rows, key)
|
||||
}
|
||||
}
|
||||
if err := fillServerAnalysisNames(db, rows); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user