mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-21 02:30:14 +00:00
fix(service): filter service stats based on user permissions
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user