refactor(park):园区部分的归属判断改为采用通用函数完成,
This commit is contained in:
parent
77587b8157
commit
be270597f5
|
@ -3,8 +3,12 @@ package controller
|
|||
import (
|
||||
"electricity_bill_calc/exceptions"
|
||||
"electricity_bill_calc/model"
|
||||
"electricity_bill_calc/repository"
|
||||
"electricity_bill_calc/response"
|
||||
"net/http"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func _retreiveSession(c *fiber.Ctx) (*model.Session, error) {
|
||||
|
@ -18,3 +22,21 @@ func _retreiveSession(c *fiber.Ctx) (*model.Session, error) {
|
|||
}
|
||||
return userSession, nil
|
||||
}
|
||||
|
||||
// 检查当前用户是否拥有指定园区,在判断完成之后直接产生响应
|
||||
func checkParkBelongs(logger *zap.Logger, parkId string, session *model.Session, result *response.Result) (bool, error) {
|
||||
if session == nil {
|
||||
logger.Error("用户会话无效。")
|
||||
return false, result.Unauthorized("用户会话无效。")
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.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))
|
||||
return false, result.Forbidden("您无权访问该园区。")
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package controller
|
|||
|
||||
import (
|
||||
"electricity_bill_calc/logger"
|
||||
"electricity_bill_calc/model"
|
||||
"electricity_bill_calc/repository"
|
||||
"electricity_bill_calc/response"
|
||||
"electricity_bill_calc/security"
|
||||
|
@ -30,24 +29,6 @@ func InitializeParkHandlers(router *fiber.App) {
|
|||
router.Put("/park/:pid/building/:bid/enabled", security.EnterpriseAuthorize, modifyParkBuildingEnabling)
|
||||
}
|
||||
|
||||
// 检查当前用户是否拥有指定园区,在判断完成之后直接产生响应
|
||||
func checkParkBelongs(logger *zap.Logger, parkId string, session *model.Session, result *response.Result) (bool, error) {
|
||||
if session == nil {
|
||||
logger.Error("用户会话无效。")
|
||||
return false, result.Unauthorized("用户会话无效。")
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
logger.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.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))
|
||||
return false, result.Forbidden("您无权访问该园区。")
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 列出隶属于当前用户的全部园区
|
||||
func listParksBelongsToCurrentUser(c *fiber.Ctx) error {
|
||||
result := response.NewResult(c)
|
||||
|
@ -131,14 +112,8 @@ func modifySpecificPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区的信息,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
parkForm := new(vo.ParkInformationForm)
|
||||
if err := c.BodyParser(parkForm); err != nil {
|
||||
|
@ -150,7 +125,7 @@ func modifySpecificPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("无法将园区表单数据转换为园区对象。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.NotAccept(err.Error())
|
||||
}
|
||||
ok, err = repository.ParkRepository.UpdatePark(parkId, park)
|
||||
ok, err := repository.ParkRepository.UpdatePark(parkId, park)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法更新园区信息。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -171,21 +146,15 @@ func modifyParkEnabling(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区的可用性,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
stateForm := new(vo.StateForm)
|
||||
if err := c.BodyParser(stateForm); err != nil {
|
||||
parkLog.Error("无法解析园区表单数据。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.NotAccept(err.Error())
|
||||
}
|
||||
ok, err = repository.ParkRepository.EnablingPark(parkId, stateForm.Enabled)
|
||||
ok, err := repository.ParkRepository.EnablingPark(parkId, stateForm.Enabled)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法更新园区可用性。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -206,16 +175,10 @@ func deleteSpecificPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("删除指定的园区,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
ok, err = repository.ParkRepository.DeletePark(parkId)
|
||||
ok, err := repository.ParkRepository.DeletePark(parkId)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法删除园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -262,21 +225,15 @@ func createBuildingInPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("在指定园区中创建一个新的建筑,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
buildingForm := new(vo.ParkBuildingInformationForm)
|
||||
if err := c.BodyParser(buildingForm); err != nil {
|
||||
parkLog.Error("无法解析建筑表单数据。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.NotAccept(err.Error())
|
||||
}
|
||||
ok, err = repository.ParkRepository.CreateParkBuilding(parkId, buildingForm.Name, &buildingForm.Floors)
|
||||
ok, err := repository.ParkRepository.CreateParkBuilding(parkId, buildingForm.Name, &buildingForm.Floors)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法创建新的建筑。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -298,21 +255,15 @@ func modifySpecificBuildingInPark(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区中的指定建筑的信息,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
buildingForm := new(vo.ParkBuildingInformationForm)
|
||||
if err := c.BodyParser(buildingForm); err != nil {
|
||||
parkLog.Error("无法解析建筑表单数据。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.NotAccept(err.Error())
|
||||
}
|
||||
ok, err = repository.ParkRepository.ModifyParkBuilding(buildingId, parkId, buildingForm.Name, &buildingForm.Floors)
|
||||
ok, err := repository.ParkRepository.ModifyParkBuilding(buildingId, parkId, buildingForm.Name, &buildingForm.Floors)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法更新建筑信息。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -334,21 +285,15 @@ func modifyParkBuildingEnabling(c *fiber.Ctx) error {
|
|||
parkLog.Error("修改指定园区中指定建筑的可用性,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
stateForm := new(vo.StateForm)
|
||||
if err := c.BodyParser(stateForm); err != nil {
|
||||
parkLog.Error("无法解析建筑表单数据。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.NotAccept(err.Error())
|
||||
}
|
||||
ok, err = repository.ParkRepository.EnablingParkBuilding(buildingId, parkId, stateForm.Enabled)
|
||||
ok, err := repository.ParkRepository.EnablingParkBuilding(buildingId, parkId, stateForm.Enabled)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法更新建筑可用性。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
@ -370,16 +315,10 @@ func deletedParkBuilding(c *fiber.Ctx) error {
|
|||
parkLog.Error("删除指定园区中的指定建筑,无法获取当前用户的会话。")
|
||||
return result.Unauthorized(err.Error())
|
||||
}
|
||||
ok, err := repository.ParkRepository.IsParkBelongs(parkId, session.Uid)
|
||||
switch {
|
||||
case err != nil:
|
||||
parkLog.Error("无法判断园区是否隶属于当前用户。", zap.String("park id", parkId), zap.String("user id", session.Uid), zap.Error(err))
|
||||
return result.Error(http.StatusInternalServerError, err.Error())
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("用户试图访问不属于自己的园区。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
return result.Forbidden("您无权访问该园区。")
|
||||
if pass, err := checkParkBelongs(parkLog, parkId, session, &result); !pass {
|
||||
return err
|
||||
}
|
||||
ok, err = repository.ParkRepository.DeleteParkBuilding(buildingId, parkId)
|
||||
ok, err := repository.ParkRepository.DeleteParkBuilding(buildingId, parkId)
|
||||
switch {
|
||||
case err == nil && !ok:
|
||||
parkLog.Error("无法删除建筑。", zap.String("park id", parkId), zap.String("user id", session.Uid))
|
||||
|
|
Loading…
Reference in New Issue
Block a user