refactor(controller):抽提资源归属判断方法。

This commit is contained in:
徐涛 2022-08-20 16:38:05 +08:00
parent 738472a5fb
commit 374eece8fb
4 changed files with 76 additions and 159 deletions

View File

@ -20,6 +20,24 @@ func InitializeMaintenanceFeeController(router *gin.Engine) {
router.DELETE("/maintenance/fee/:mid", security.EnterpriseAuthorize, deleteMaintenanceFee) router.DELETE("/maintenance/fee/:mid", security.EnterpriseAuthorize, deleteMaintenanceFee)
} }
func ensureMaintenanceFeeBelongs(c *gin.Context, result *response.Result, requestMaintenanceFeeId string) bool {
userSession, err := _retreiveSession(c)
if err != nil {
result.Unauthorized(err.Error())
return false
}
sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestMaintenanceFeeId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return false
}
if !sure {
result.Unauthorized("所操作维护费记录不属于当前用户。")
return false
}
return true
}
func listMaintenanceFees(c *gin.Context) { func listMaintenanceFees(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
userSession, err := _retreiveSession(c) userSession, err := _retreiveSession(c)
@ -29,13 +47,7 @@ func listMaintenanceFees(c *gin.Context) {
} }
requestPark := c.DefaultQuery("park", "") requestPark := c.DefaultQuery("park", "")
if len(requestPark) > 0 { if len(requestPark) > 0 {
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestPark) if !ensureParkBelongs(c, result, requestPark) {
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
fees, err := service.MaintenanceFeeService.ListMaintenanceFees([]string{requestPark}) fees, err := service.MaintenanceFeeService.ListMaintenanceFees([]string{requestPark})
@ -70,23 +82,12 @@ func createMaintenanceFeeRecord(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
formData := new(_FeeCreationFormData) formData := new(_FeeCreationFormData)
c.BindJSON(formData) c.BindJSON(formData)
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, formData.ParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, formData.ParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
newMaintenanceFee := &model.MaintenanceFee{} newMaintenanceFee := &model.MaintenanceFee{}
copier.Copy(newMaintenanceFee, formData) copier.Copy(newMaintenanceFee, formData)
err = service.MaintenanceFeeService.CreateMaintenanceFeeRecord(*newMaintenanceFee) err := service.MaintenanceFeeService.CreateMaintenanceFeeRecord(*newMaintenanceFee)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return
@ -104,23 +105,12 @@ func modifyMaintenanceFeeRecord(c *gin.Context) {
requestFee := c.Param("mid") requestFee := c.Param("mid")
formData := new(_FeeModificationFormData) formData := new(_FeeModificationFormData)
c.BindJSON(formData) c.BindJSON(formData)
userSession, err := _retreiveSession(c) if !ensureMaintenanceFeeBelongs(c, result, requestFee) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestFee)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("所操作维护费记录不属于当前用户。")
return return
} }
newFeeState := new(model.MaintenanceFee) newFeeState := new(model.MaintenanceFee)
copier.Copy(newFeeState, formData) copier.Copy(newFeeState, formData)
err = service.MaintenanceFeeService.ModifyMaintenanceFee(*newFeeState) err := service.MaintenanceFeeService.ModifyMaintenanceFee(*newFeeState)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return
@ -137,21 +127,10 @@ func changeMaintenanceFeeState(c *gin.Context) {
requestFee := c.Param("mid") requestFee := c.Param("mid")
formData := new(_FeeStateFormData) formData := new(_FeeStateFormData)
c.BindJSON(formData) c.BindJSON(formData)
userSession, err := _retreiveSession(c) if !ensureMaintenanceFeeBelongs(c, result, requestFee) {
if err != nil {
result.Unauthorized(err.Error())
return return
} }
sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestFee) err := service.MaintenanceFeeService.ChangeMaintenanceFeeState(requestFee, formData.Enabled)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("所操作维护费记录不属于当前用户。")
return
}
err = service.MaintenanceFeeService.ChangeMaintenanceFeeState(requestFee, formData.Enabled)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return
@ -162,21 +141,10 @@ func changeMaintenanceFeeState(c *gin.Context) {
func deleteMaintenanceFee(c *gin.Context) { func deleteMaintenanceFee(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestFee := c.Param("mid") requestFee := c.Param("mid")
userSession, err := _retreiveSession(c) if !ensureMaintenanceFeeBelongs(c, result, requestFee) {
if err != nil {
result.Unauthorized(err.Error())
return return
} }
sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestFee) err := service.MaintenanceFeeService.DeleteMaintenanceFee(requestFee)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("所操作维护费记录不属于当前用户。")
return
}
err = service.MaintenanceFeeService.DeleteMaintenanceFee(requestFee)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return

View File

@ -29,18 +29,7 @@ func InitializeMeter04kVController(router *gin.Engine) {
func download04kvMeterArchiveTemplate(c *gin.Context) { func download04kvMeterArchiveTemplate(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) parkDetail, err := service.ParkService.FetchParkDetail(requestParkId)
@ -57,18 +46,7 @@ func download04kvMeterArchiveTemplate(c *gin.Context) {
func ListPaged04kVMeter(c *gin.Context) { func ListPaged04kVMeter(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1"))
@ -93,18 +71,7 @@ func ListPaged04kVMeter(c *gin.Context) {
func fetch04kVMeterDetail(c *gin.Context) { func fetch04kVMeterDetail(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
requestMeterCode := c.Param("code") requestMeterCode := c.Param("code")
@ -148,18 +115,7 @@ type _MeterCreationFormData struct {
func createSingle04kVMeter(c *gin.Context) { func createSingle04kVMeter(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
formData := new(_MeterCreationFormData) formData := new(_MeterCreationFormData)
@ -169,7 +125,7 @@ func createSingle04kVMeter(c *gin.Context) {
copier.Copy(newMeter, formData) copier.Copy(newMeter, formData)
newMeter.ParkId = requestParkId newMeter.ParkId = requestParkId
log.Printf("[controller|debug] meter: %+v", newMeter) log.Printf("[controller|debug] meter: %+v", newMeter)
err = service.Meter04kVService.CreateSingleMeter(*newMeter) err := service.Meter04kVService.CreateSingleMeter(*newMeter)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return
@ -180,18 +136,7 @@ func createSingle04kVMeter(c *gin.Context) {
func modifySingle04kVMeter(c *gin.Context) { func modifySingle04kVMeter(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
requestMeterCode := c.Param("code") requestMeterCode := c.Param("code")
@ -218,18 +163,7 @@ func modifySingle04kVMeter(c *gin.Context) {
func batchImport04kVMeterArchive(c *gin.Context) { func batchImport04kVMeterArchive(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
userSession, err := _retreiveSession(c) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Unauthorized(err.Error())
return
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
uploadedFile, err := c.FormFile("data") uploadedFile, err := c.FormFile("data")

View File

@ -24,6 +24,24 @@ func InitializeParkController(router *gin.Engine) {
router.DELETE("/park/:pid", security.EnterpriseAuthorize, deleteSpecificPark) router.DELETE("/park/:pid", security.EnterpriseAuthorize, deleteSpecificPark)
} }
func ensureParkBelongs(c *gin.Context, result *response.Result, requestParkId string) bool {
userSession, err := _retreiveSession(c)
if err != nil {
result.Unauthorized(err.Error())
return false
}
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return false
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return false
}
return true
}
func listAllParksUnderSessionUser(c *gin.Context) { func listAllParksUnderSessionUser(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
userSession, err := _retreiveSession(c) userSession, err := _retreiveSession(c)
@ -119,21 +137,15 @@ func modifyPark(c *gin.Context) {
func fetchParkDetail(c *gin.Context) { func fetchParkDetail(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
userSession, err := _retreiveSession(c) requestParkId := c.Param("pid")
if err != nil { if !ensureParkBelongs(c, result, requestParkId) {
result.Unauthorized(err.Error())
return return
} }
requestParkId := c.Param("pid")
park, err := service.ParkService.FetchParkDetail(requestParkId) park, err := service.ParkService.FetchParkDetail(requestParkId)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())
return return
} }
if userSession.Uid != park.UserId {
result.Unauthorized("不能访问不属于自己的园区。")
return
}
result.Json(http.StatusOK, "已经获取到指定园区的信息。", gin.H{"park": park}) result.Json(http.StatusOK, "已经获取到指定园区的信息。", gin.H{"park": park})
} }
@ -149,6 +161,9 @@ func changeParkEnableState(c *gin.Context) {
return return
} }
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
if !ensureParkBelongs(c, result, requestParkId) {
return
}
formData := new(_ParkStateFormData) formData := new(_ParkStateFormData)
c.BindJSON(formData) c.BindJSON(formData)
err = service.ParkService.ChangeParkState(userSession.Uid, requestParkId, formData.Enabled) err = service.ParkService.ChangeParkState(userSession.Uid, requestParkId, formData.Enabled)
@ -167,6 +182,9 @@ func deleteSpecificPark(c *gin.Context) {
return return
} }
requestParkId := c.Param("pid") requestParkId := c.Param("pid")
if !ensureParkBelongs(c, result, requestParkId) {
return
}
err = service.ParkService.DeletePark(userSession.Uid, requestParkId) err = service.ParkService.DeletePark(userSession.Uid, requestParkId)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) result.Error(http.StatusInternalServerError, err.Error())

View File

@ -16,6 +16,20 @@ func InitializeReportController(router *gin.Engine) {
router.GET("/report/:rid/step/state", security.EnterpriseAuthorize, fetchReportStepStates) router.GET("/report/:rid/step/state", security.EnterpriseAuthorize, fetchReportStepStates)
} }
func ensureReportBelongs(c *gin.Context, result *response.Result, requestReportId string) bool {
_, err := _retreiveSession(c)
if err != nil {
result.Unauthorized(err.Error())
return false
}
requestReport, err := service.ReportService.RetreiveReportIndex(requestReportId)
if err != nil {
result.NotFound(err.Error())
return false
}
return ensureParkBelongs(c, result, requestReport.ParkId)
}
func fetchNewestReportOfParkWithDraft(c *gin.Context) { func fetchNewestReportOfParkWithDraft(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
userSession, err := _retreiveSession(c) userSession, err := _retreiveSession(c)
@ -39,13 +53,7 @@ func initializeNewReport(c *gin.Context) {
result.Unauthorized(err.Error()) result.Unauthorized(err.Error())
return return
} }
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) if !ensureParkBelongs(c, result, requestParkId) {
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return return
} }
requestPeriod := c.Query("period") requestPeriod := c.Query("period")
@ -74,9 +82,7 @@ func initializeNewReport(c *gin.Context) {
func fetchReportStepStates(c *gin.Context) { func fetchReportStepStates(c *gin.Context) {
result := response.NewResult(c) result := response.NewResult(c)
requestReportId := c.Param("rid") requestReportId := c.Param("rid")
userSession, err := _retreiveSession(c) if !ensureReportBelongs(c, result, requestReportId) {
if err != nil {
result.Unauthorized(err.Error())
return return
} }
requestReport, err := service.ReportService.RetreiveReportIndex(requestReportId) requestReport, err := service.ReportService.RetreiveReportIndex(requestReportId)
@ -84,14 +90,5 @@ func fetchReportStepStates(c *gin.Context) {
result.NotFound(err.Error()) result.NotFound(err.Error())
return return
} }
sure, err := service.ParkService.EnsurePark(userSession.Uid, requestReport.ParkId)
if err != nil {
result.Error(http.StatusInternalServerError, err.Error())
return
}
if !sure {
result.Unauthorized("不能访问不属于自己的园区。")
return
}
result.Json(http.StatusOK, "已经获取到指定报表的填写状态。", gin.H{"steps": requestReport.StepState}) result.Json(http.StatusOK, "已经获取到指定报表的填写状态。", gin.H{"steps": requestReport.StepState})
} }