refactor(park):调整判断园区归属的逻和使用方法。
This commit is contained in:
parent
7531a6a5a1
commit
577ac9d1dc
|
@ -24,18 +24,23 @@ func _retreiveSession(c *fiber.Ctx) (*model.Session, error) {
|
|||
}
|
||||
|
||||
// 检查当前用户是否拥有指定园区,在判断完成之后直接产生响应
|
||||
func checkParkBelongs(logger *zap.Logger, parkId string, session *model.Session, result *response.Result) (bool, error) {
|
||||
func checkParkBelongs(parkId string, logger *zap.Logger, c *fiber.Ctx, result *response.Result) (bool, error) {
|
||||
session := c.Locals("session")
|
||||
if session == nil {
|
||||
logger.Error("用户会话无效。")
|
||||
return false, result.Unauthorized("用户会话无效。")
|
||||
logger.Error("用户会话不存在。")
|
||||
return false, result.Unauthorized("用户会话不存在。")
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
userSession, ok := session.(*model.Session)
|
||||
if !ok {
|
||||
return false, result.Unauthorized("用户会话格式不正确,需要重新登录")
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, userSession.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", userSession.Uid), zap.Error(err))
|
||||
return false, result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
logger.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
logger.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", userSession.Uid))
|
||||
return false, result.Forbidden("您无权访问该园区。")
|
||||
}
|
||||
return true, nil
|
||||
|
|
|
@ -48,12 +48,7 @@ func searchMetersWithinPark(c *fiber.Ctx) error {
|
|||
parkId := c.Params("parkId")
|
||||
meterLog.Info("查询指定园区下的表计信息", zap.String("park id", parkId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法查询指定园区下的表计信息,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
keyword := c.Query("keyword")
|
||||
|
@ -76,12 +71,7 @@ func retrieveSpecificMeterDetail(c *fiber.Ctx) error {
|
|||
meterId := c.Params("code")
|
||||
meterLog.Info("查询指定园区中指定表计的详细信息", zap.String("park id", parkId), zap.String("meter id", meterId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法查询指定园区中指定表计的详细信息,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
meter, err := repository.MeterRepository.FetchMeterDetail(parkId, meterId)
|
||||
|
@ -101,12 +91,7 @@ func createNewMeterManually(c *fiber.Ctx) error {
|
|||
parkId := c.Params("pid")
|
||||
meterLog.Info("手动添加一条0.4kV表计记录", zap.String("park id", parkId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法手动添加一条0.4kV表计记录,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
var creationForm vo.MeterCreationForm
|
||||
|
@ -127,12 +112,7 @@ func updateMeterManually(c *fiber.Ctx) error {
|
|||
meterId := c.Params("code")
|
||||
meterLog.Info("手动更新一条新的0.4kV表计记录", zap.String("park id", parkId), zap.String("meter id", meterId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法手动更新一条新的0.4kV表计记录,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
var updateForm vo.MeterModificationForm
|
||||
|
@ -152,12 +132,7 @@ func downloadMeterArchiveTemplate(c *fiber.Ctx) error {
|
|||
parkId := c.Params("pid")
|
||||
meterLog.Info("下载指定的园区表计登记模板", zap.String("park id", parkId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法下载指定的园区表计登记模板,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
parkDetail, err := repository.ParkRepository.RetrieveParkDetail(parkId)
|
||||
|
@ -194,13 +169,8 @@ func downloadMeterArchiveTemplate(c *fiber.Ctx) error {
|
|||
// 从Excel文件中导入表计档案
|
||||
func uploadMeterArchive(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法从Excel文件中导入表计档案,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
uploadFile, err := c.FormFile("data")
|
||||
|
@ -222,12 +192,7 @@ func replaceMeter(c *fiber.Ctx) error {
|
|||
meterId := c.Params("code")
|
||||
meterLog.Info("更换系统中的表计", zap.String("park id", parkId), zap.String("meter id", meterId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法更换系统中的表计,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
var replacementForm vo.MeterReplacingForm
|
||||
|
@ -241,13 +206,8 @@ func replaceMeter(c *fiber.Ctx) error {
|
|||
// 列出指定公摊表计下的所有关联表计
|
||||
func listAssociatedMeters(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法列出指定公摊表计下的所有关联表计,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
meterId := c.Params("code")
|
||||
|
@ -263,13 +223,8 @@ func listAssociatedMeters(c *fiber.Ctx) error {
|
|||
// 向指定表计绑定关联表计
|
||||
func bindAssociatedMeters(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法向指定表计绑定关联表计,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
meterId := c.Params("code")
|
||||
|
@ -294,13 +249,8 @@ func bindAssociatedMeters(c *fiber.Ctx) error {
|
|||
// 解除指定园区下两个表计之间的关联关系
|
||||
func unbindAssociatedMeters(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法解除指定园区下两个表计之间的关联关系,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
masterMeter := c.Params("master")
|
||||
|
@ -324,13 +274,8 @@ func unbindAssociatedMeters(c *fiber.Ctx) error {
|
|||
// 分页列出园区中的公摊表计
|
||||
func listPooledMeters(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法分页列出园区中的公摊表计,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
page := c.QueryInt("page", 1)
|
||||
|
@ -356,7 +301,7 @@ func listUnboundMeters(c *fiber.Ctx) error {
|
|||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
keyword := c.Query("keyword")
|
||||
|
@ -384,7 +329,7 @@ func listUnboundTenementMeters(c *fiber.Ctx) error {
|
|||
meterLog.Error("无法列出指定园区中尚未绑定商户的表计,未指定要访问的园区ID")
|
||||
return result.NotAccept("未指定要访问的园区。")
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
keyword := c.Query("keyword")
|
||||
|
@ -402,13 +347,8 @@ func listUnboundTenementMeters(c *fiber.Ctx) error {
|
|||
// 查询指定园区中的表计读数
|
||||
func queryMeterReadings(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("查询指定园区中的表计读数,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
keyword := tools.EmptyToNil(c.Query("keyword"))
|
||||
|
@ -450,13 +390,8 @@ func queryMeterReadings(c *fiber.Ctx) error {
|
|||
// 记录一条新的表计抄表记录
|
||||
func recordMeterReading(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("记录一条新的表计抄表记录,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
meterCode := c.Params("code")
|
||||
|
@ -469,7 +404,7 @@ func recordMeterReading(c *fiber.Ctx) error {
|
|||
meterLog.Warn("记录一条新的表计抄表记录,表计读数不能正常配平,尖、峰、谷电量和超过总电量。")
|
||||
return result.NotAccept("表计读数不能正常配平,尖、峰、谷电量和超过总电量。")
|
||||
}
|
||||
err = service.MeterService.RecordReading(parkId, meterCode, &readingForm)
|
||||
err := service.MeterService.RecordReading(parkId, meterCode, &readingForm)
|
||||
if err != nil {
|
||||
meterLog.Error("记录一条新的表计抄表记录,无法记录表计抄表记录", zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
|
@ -480,13 +415,8 @@ func recordMeterReading(c *fiber.Ctx) error {
|
|||
// 更新指定园区中指定表计的抄表记录
|
||||
func updateMeterReading(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("更新一条新的表计抄表记录,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
parkId := c.Params("pid")
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
meterCode := c.Params("code")
|
||||
|
@ -518,12 +448,7 @@ func downloadMeterReadingsTemplate(c *fiber.Ctx) error {
|
|||
parkId := c.Params("pid")
|
||||
meterLog.Info("下载指定的园区表计抄表模板", zap.String("park id", parkId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法下载指定的园区表计抄表模板,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
parkDetail, err := repository.ParkRepository.RetrieveParkDetail(parkId)
|
||||
|
@ -560,12 +485,7 @@ func uploadMeterReadings(c *fiber.Ctx) error {
|
|||
parkId := c.Params("pid")
|
||||
meterLog.Info("从Excel文件中导入抄表档案", zap.String("park id", parkId))
|
||||
result := response.NewResult(c)
|
||||
session, err := _retreiveSession(c)
|
||||
if err != nil {
|
||||
meterLog.Error("无法从Excel文件中导入抄表档案,无法获取当前用户会话", zap.Error(err))
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(meterLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
uploadFile, err := c.FormFile("data")
|
||||
|
|
|
@ -112,7 +112,7 @@ func modifySpecificPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区的信息,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
parkForm := new(vo.ParkInformationForm)
|
||||
|
@ -146,7 +146,7 @@ func modifyParkEnabling(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区的可用性,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
stateForm := new(vo.StateForm)
|
||||
|
@ -175,7 +175,7 @@ func deleteSpecificPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("删除指定的园区,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
ok, err := repository.ParkRepository.DeletePark(parkId)
|
||||
|
@ -225,7 +225,7 @@ func createBuildingInPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("在指定园区中创建一个新的建筑,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
buildingForm := new(vo.ParkBuildingInformationForm)
|
||||
|
@ -255,7 +255,7 @@ func modifySpecificBuildingInPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区中的指定建筑的信息,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
buildingForm := new(vo.ParkBuildingInformationForm)
|
||||
|
@ -285,7 +285,7 @@ func modifyParkBuildingEnabling(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区中指定建筑的可用性,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
stateForm := new(vo.StateForm)
|
||||
|
@ -315,7 +315,7 @@ func deletedParkBuilding(c *fiber.Ctx) error {
|
|||
parkLog.Error("删除指定园区中的指定建筑,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
if pass, err := checkParkBelongs(parkId, parkLog, c, &result); !pass {
|
||||
return err
|
||||
}
|
||||
ok, err := repository.ParkRepository.DeleteParkBuilding(buildingId, parkId)
|
||||
|
|
Loading…
Reference in New Issue
Block a user