fix(service): filter service stats based on user permissions

This commit is contained in:
hamster1963
2026-06-20 00:45:53 +08:00
parent 3d74cd9431
commit 7a61da098b
3 changed files with 45 additions and 20 deletions
+17 -1
View File
@@ -29,7 +29,7 @@ func showService(c *gin.Context) (*model.ServiceResponse, error) {
res, err, _ := requestGroup.Do(serviceResponseCacheKey(c), func() (any, error) {
singleton.AlertsLock.RLock()
defer singleton.AlertsLock.RUnlock()
stats := singleton.ServiceSentinelShared.CopyStats()
stats := filterServiceStatsForViewer(c, singleton.ServiceSentinelShared.CopyStats())
var cycleTransferStats map[uint64]model.CycleTransferStats
copier.Copy(&cycleTransferStats, singleton.AlertsCycleTransferStatsStore)
return []any{
@@ -46,6 +46,22 @@ func showService(c *gin.Context) (*model.ServiceResponse, error) {
}, nil
}
func filterServiceStatsForViewer(c *gin.Context, stats map[uint64]model.ServiceResponseItem) map[uint64]model.ServiceResponseItem {
if len(stats) == 0 {
return stats
}
services := singleton.ServiceSentinelShared.GetList()
filteredStats := make(map[uint64]model.ServiceResponseItem, len(stats))
for serviceID, stat := range stats {
service, ok := services[serviceID]
if !ok || !userCanViewService(c, service) {
continue
}
filteredStats[serviceID] = stat
}
return filteredStats
}
func serviceResponseCacheKey(c *gin.Context) string {
auth, ok := c.Get(model.CtxKeyAuthorizedUser)
if !ok {