package controller import ( "github.com/gin-gonic/gin" "github.com/nezhahq/nezha/model" "github.com/nezhahq/nezha/service/singleton" ) func callerIsAdmin(c *gin.Context) bool { auth, ok := c.Get(model.CtxKeyAuthorizedUser) if !ok { return false } user, ok := auth.(*model.User) if !ok || user == nil { return false } return user.Role.IsAdmin() } func userCanViewServer(c *gin.Context, server *model.Server) bool { if server == nil { return false } if callerIsAdmin(c) { return true } if _, isMember := c.Get(model.CtxKeyAuthorizedUser); isMember { if server.HasPermission(c) { return true } return !server.HideForGuest } return !server.HideForGuest } func userCanViewService(c *gin.Context, service *model.Service) bool { if service == nil { return false } if service.EnableShowInService { return true } if callerIsAdmin(c) { return true } if _, isMember := c.Get(model.CtxKeyAuthorizedUser); isMember { return service.HasPermission(c) } return false } func assertOwnsNotificationGroup(c *gin.Context, groupID uint64) error { if groupID == 0 { return nil } var ng model.NotificationGroup if err := singleton.DB.First(&ng, groupID).Error; err != nil { return singleton.Localizer.ErrorT("notification group id %d does not exist", groupID) } if !ng.HasPermission(c) { return singleton.Localizer.ErrorT("permission denied") } return nil }