Files
kefu_cloud/server/internal/handler/settings.go
T
yml2213 24fac1bcf1
CI / Backend (go vet + test) (push) Failing after 40m21s
CI / Frontend (typecheck + lint + build) (push) Successful in 1h21m3s
fix(widget): 完善自动回复与新会话进线提醒
2026-11-03 19:29:32 +08:00

74 lines
2.4 KiB
Go

package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"kefu-cloud/server/internal/middleware"
"kefu-cloud/server/internal/service"
)
type SettingsHandler struct{}
func NewSettingsHandler() *SettingsHandler { return &SettingsHandler{} }
func (h *SettingsHandler) Get(c *gin.Context) {
tenantID := middleware.GetTenantID(c)
if tenantID == 0 {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "仅租户账号可查看设置"})
return
}
setting, err := service.GetOrCreateTenantSettings(tenantID)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 500, "message": "加载设置失败"})
return
}
middleware.JSON(c, service.SettingsResponse(setting))
}
func (h *SettingsHandler) Update(c *gin.Context) {
tenantID := middleware.GetTenantID(c)
if tenantID == 0 {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "仅租户账号可修改设置"})
return
}
if _, err := service.GetOrCreateTenantSettings(tenantID); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 500, "message": "加载设置失败"})
return
}
var req service.SettingsUpdateReq
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"code": 400, "message": "参数错误"})
return
}
// 设置权限按字段分区校验,避免仅拥有基本设置权限即可修改分配、工作时间或通知策略。
if req.TouchesBasic() && !middleware.HasPermission(c, "settings.basic") {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "无权修改基本设置"})
return
}
if req.TouchesAssignRule() && !middleware.HasPermission(c, "settings.assign_rule") {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "无权修改客服分配规则"})
return
}
if req.TouchesAutoReply() && !middleware.HasPermission(c, "settings.auto_reply") {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "无权修改自动回复设置"})
return
}
if req.TouchesWorktime() && !middleware.HasPermission(c, "settings.worktime") {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "无权修改工作时间设置"})
return
}
if req.TouchesNotification() && !middleware.HasPermission(c, "settings.notification") {
c.JSON(http.StatusForbidden, gin.H{"code": 403, "message": "无权修改通知设置"})
return
}
resp, err := service.UpdateTenantSettings(tenantID, &req)
if err != nil {
respondServiceError(c, err)
return
}
middleware.JSON(c, resp)
}