Browse Source

fix(service): 修复删除转发规则时的权限验证问题

- 在 TCP、UDP 和 Web 转发服务中添加了对 HostId 的权限验证
- 修改了删除操作的请求结构,增加了用户 ID 和主机 ID 的验证
-优化了错误处理,确保在权限不足时返回相应错误信息
fusu 3 weeks ago
parent
commit
0418e29b01

+ 2 - 0
api/v1/udpForwarding.go

@@ -9,6 +9,8 @@ type UdpForwardingDataRequest struct {
 	Proxy             bool     `form:"proxy" json:"proxy" default:"false"`
 }
 type DeleteUdpForwardingRequest struct {
+	Uid   int   `form:"uid" json:"uid" validate:"required"`
+	HostId   int   `form:"hostId" json:"hostId" validate:"required"`
 	Ids   []int `form:"ids" json:"ids" validate:"required,min=1,dive,required"`
 }
 

+ 1 - 1
internal/handler/udpforwarding.go

@@ -78,7 +78,7 @@ func (h *UdpForWardingHandler) DeleteUdpForWarding(ctx *gin.Context) {
 		return
 	}
 	defaults.SetDefaults(req)
-	 err := h.udpForWardingService.DeleteUdpForwarding(ctx, req.Ids)
+	 err := h.udpForWardingService.DeleteUdpForwarding(ctx, *req)
 	if err != nil {
 		v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
 		return

+ 1 - 1
internal/handler/webforwarding.go

@@ -78,7 +78,7 @@ func (h *WebForwardingHandler) DeleteWebForwarding(ctx *gin.Context) {
 		return
 	}
 	defaults.SetDefaults(req)
-	 err := h.webForwardingService.DeleteWebForwarding(ctx, req.Ids)
+	 err := h.webForwardingService.DeleteWebForwarding(ctx, *req)
 	if err != nil {
 		v1.HandleError(ctx, http.StatusInternalServerError, err, err.Error())
 		return

+ 3 - 0
internal/service/tcpforwarding.go

@@ -387,6 +387,9 @@ func (s *tcpforwardingService) DeleteTcpForwarding(ctx context.Context, req v1.D
 		if err != nil {
 			return err
 		}
+		if oldData.HostId != req.HostId {
+			return fmt.Errorf("用户权限不足")
+		}
 
 		err = s.cdn.DelServer(ctx, int64(oldData.CdnWebId))
 		if err != nil {

+ 7 - 3
internal/service/udpforwarding.go

@@ -17,7 +17,7 @@ type UdpForWardingService interface {
 	GetUdpForWarding(ctx context.Context,req v1.GetForwardingRequest) (v1.UdpForwardingDataRequest, error)
 	AddUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) error
 	EditUdpForwarding(ctx context.Context, req *v1.UdpForwardingRequest) error
-	DeleteUdpForwarding(ctx context.Context, Ids []int) error
+	DeleteUdpForwarding(ctx context.Context, req v1.DeleteUdpForwardingRequest) error
 	GetUdpForwardingWafUdpAllIps(ctx context.Context, req v1.GetForwardingRequest) ([]v1.UdpForwardingDataRequest, error)
 }
 
@@ -379,13 +379,17 @@ func (s *udpForWardingService) EditUdpForwarding(ctx context.Context, req *v1.Ud
 	return nil
 }
 
-func (s *udpForWardingService) DeleteUdpForwarding(ctx context.Context, Ids []int) error {
-	for _, id := range Ids {
+func (s *udpForWardingService) DeleteUdpForwarding(ctx context.Context, req v1.DeleteUdpForwardingRequest) error {
+	for _, id := range req.Ids {
 		oldData, err := s.udpForWardingRepository.GetUdpForWarding(ctx, int64(id))
 		if err != nil {
 			return err
 		}
 
+		if oldData.HostId != req.HostId {
+			return fmt.Errorf("用户权限不足")
+		}
+
 		err = s.cdn.DelServer(ctx, int64(oldData.CdnWebId))
 		if err != nil {
 			return err

+ 7 - 3
internal/service/webforwarding.go

@@ -19,7 +19,7 @@ type WebForwardingService interface {
 	GetWebForwardingWafWebAllIps(ctx context.Context, req v1.GetForwardingRequest) ([]v1.WebForwardingDataRequest, error)
 	AddWebForwarding(ctx context.Context, req *v1.WebForwardingRequest) error
 	EditWebForwarding(ctx context.Context, req *v1.WebForwardingRequest) error
-	DeleteWebForwarding(ctx context.Context, Ids []int) error
+	DeleteWebForwarding(ctx context.Context, req v1.DeleteWebForwardingRequest) error
 }
 
 func NewWebForwardingService(
@@ -823,13 +823,17 @@ func (s *webForwardingService) EditWebForwarding(ctx context.Context, req *v1.We
 	return nil
 }
 
-func (s *webForwardingService) DeleteWebForwarding(ctx context.Context, Ids []int) error {
-	for _, Id := range Ids {
+func (s *webForwardingService) DeleteWebForwarding(ctx context.Context, req v1.DeleteWebForwardingRequest) error {
+	for _, Id := range req.Ids {
 		oldData, err := s.webForwardingRepository.GetWebForwarding(ctx, int64(Id))
 		if err != nil {
 			return err
 		}
 
+		if oldData.HostId != req.HostId {
+			return fmt.Errorf("用户权限不足")
+		}
+
 		err = s.cdn.DelServer(ctx, int64(oldData.CdnWebId))
 		if err != nil {
 			return err