This commit is contained in:
@@ -218,6 +218,18 @@ func HandleDeleteAccount(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查账号是否归属请求用户
|
||||||
|
ownerUID, err := getAccountOwnerUID(accountID)
|
||||||
|
if err != nil {
|
||||||
|
response.ServerError(c, "获取账号所属用户失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ownerUID != userInfo.ID {
|
||||||
|
response.Forbidden(c, "无权限操作该账号")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 删除相关规则
|
// 删除相关规则
|
||||||
rules, err := getRulesByAccountID(accountID, userInfo.ID)
|
rules, err := getRulesByAccountID(accountID, userInfo.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -59,3 +59,17 @@ func maskAccounts(accounts []model.Account) []model.Account {
|
|||||||
}
|
}
|
||||||
return masked
|
return masked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getAccountOwnerUID 获取账号所属用户的 UID
|
||||||
|
func getAccountOwnerUID(accountID uint) (uint, error) {
|
||||||
|
gormDB, err := db.GetGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var account model.Account
|
||||||
|
if err := gormDB.Select("uid").Where("id = ?", accountID).First(&account).Error; err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return account.UID, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ func NotFound(c *gin.Context, msg string) { Fail(c, http.StatusNotFound, msg) }
|
|||||||
// ServerError 服务端错误
|
// ServerError 服务端错误
|
||||||
func ServerError(c *gin.Context, msg string) { Fail(c, http.StatusInternalServerError, msg) }
|
func ServerError(c *gin.Context, msg string) { Fail(c, http.StatusInternalServerError, msg) }
|
||||||
|
|
||||||
|
// Forbidden 无权限
|
||||||
|
func Forbidden(c *gin.Context, msg string) { Fail(c, http.StatusForbidden, msg) }
|
||||||
|
|
||||||
// FromError 按错误类型选择合适的状态码:
|
// FromError 按错误类型选择合适的状态码:
|
||||||
// 参数校验错误返回 400,其余返回 500
|
// 参数校验错误返回 400,其余返回 500
|
||||||
func FromError(c *gin.Context, err error, fallback string) {
|
func FromError(c *gin.Context, err error, fallback string) {
|
||||||
|
|||||||
@@ -162,6 +162,16 @@ func HandleDeleteRule(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ownerUID, err := getRuleOwnerUID(ruleID)
|
||||||
|
if err != nil {
|
||||||
|
response.ServerError(c, "获取规则所属用户失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if ownerUID != userInfo.ID {
|
||||||
|
response.Forbidden(c, "无权限操作该规则")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if err := DeleteRuleByID(ruleID, userInfo.ID); err != nil {
|
if err := DeleteRuleByID(ruleID, userInfo.ID); err != nil {
|
||||||
response.ServerError(c, "删除规则失败")
|
response.ServerError(c, "删除规则失败")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -103,3 +103,18 @@ func maskRules(rules []model.Rule) []model.Rule {
|
|||||||
}
|
}
|
||||||
return masked
|
return masked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getRuleOwnerUID 获取规则所属用户的 UID
|
||||||
|
func getRuleOwnerUID(ruleID uint) (uint, error) {
|
||||||
|
gormDB, err := db.GetGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var rule model.Rule
|
||||||
|
if err := gormDB.Select("uid").Where("id = ?", ruleID).First(&rule).Error; err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return rule.UID, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -70,3 +70,17 @@ func signTimer(timer *model.Timer) error {
|
|||||||
timer.Triggered = false
|
timer.Triggered = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getTimerOwnerUID 获取 Timer 的所属用户 ID
|
||||||
|
func getTimerOwnerUID(timerID uint) (uint, error) {
|
||||||
|
gormDB, err := db.GetGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var timer model.Timer
|
||||||
|
if err := gormDB.Select("uid").Where("id = ?", timerID).First(&timer).Error; err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return timer.UID, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user