mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 09:40:12 +00:00
fix(controller): restrict waf and online-user listings to admins
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -145,10 +145,10 @@ func routers(r *gin.Engine, frontendDist fs.FS) {
|
|||||||
auth.PATCH("/nat/:id", commonHandler(updateNAT))
|
auth.PATCH("/nat/:id", commonHandler(updateNAT))
|
||||||
auth.POST("/batch-delete/nat", commonHandler(batchDeleteNAT))
|
auth.POST("/batch-delete/nat", commonHandler(batchDeleteNAT))
|
||||||
|
|
||||||
auth.GET("/waf", pCommonHandler(listBlockedAddress))
|
auth.GET("/waf", pAdminHandler(listBlockedAddress))
|
||||||
auth.POST("/batch-delete/waf", adminHandler(batchDeleteBlockedAddress))
|
auth.POST("/batch-delete/waf", adminHandler(batchDeleteBlockedAddress))
|
||||||
|
|
||||||
auth.GET("/online-user", pCommonHandler(listOnlineUser))
|
auth.GET("/online-user", pAdminHandler(listOnlineUser))
|
||||||
auth.POST("/online-user/batch-block", adminHandler(batchBlockOnlineUser))
|
auth.POST("/online-user/batch-block", adminHandler(batchBlockOnlineUser))
|
||||||
|
|
||||||
auth.PATCH("/setting", adminHandler(updateConfig))
|
auth.PATCH("/setting", adminHandler(updateConfig))
|
||||||
@@ -285,6 +285,29 @@ func pCommonHandler[S ~[]E, E any](handler pHandlerFunc[S, E]) func(*gin.Context
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func pAdminHandler[S ~[]E, E any](handler pHandlerFunc[S, E]) func(*gin.Context) {
|
||||||
|
return func(c *gin.Context) {
|
||||||
|
auth, ok := c.Get(model.CtxKeyAuthorizedUser)
|
||||||
|
if !ok {
|
||||||
|
c.JSON(http.StatusOK, newErrorResponse(singleton.Localizer.ErrorT("unauthorized")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
user := *auth.(*model.User)
|
||||||
|
if !user.Role.IsAdmin() {
|
||||||
|
c.JSON(http.StatusOK, newErrorResponse(singleton.Localizer.ErrorT("permission denied")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := handler(c)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, newErrorResponse(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, model.PaginatedResponse[S, E]{Success: true, Data: data})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func filter[S ~[]E, E model.CommonInterface](ctx *gin.Context, s S) S {
|
func filter[S ~[]E, E model.CommonInterface](ctx *gin.Context, s S) S {
|
||||||
return slices.DeleteFunc(s, func(e E) bool {
|
return slices.DeleteFunc(s, func(e E) bool {
|
||||||
return !e.HasPermission(ctx)
|
return !e.HasPermission(ctx)
|
||||||
|
|||||||
Reference in New Issue
Block a user