Files
yunzerwebsiteallinone/go/controllers/backend_menu_front.go
T
2026-10-19 01:13:17 +08:00

152 lines
4.1 KiB
Go

package controllers
import (
"encoding/json"
"server/models"
"server/pkg/identity"
"strconv"
"time"
beego "github.com/beego/beego/v2/server/web"
)
type BackendMenuFrontController struct {
beego.Controller
}
// checkAuth 前台菜单只归租户自己维护:必须是 backend 端令牌,且令牌带上企业。
// 此前只解令牌不判端,app/platform 的令牌也能增删别家的前台菜单。
func (c *BackendMenuFrontController) checkAuth() (uint64, bool) {
claims, err := identity.Claims(c.Ctx.Request.Header.Get("Authorization"), identity.EndBackend)
if err != nil {
code := identity.Status(err)
c.Data["json"] = map[string]interface{}{"code": code, "msg": err.Error()}
_ = c.ServeJSON()
return 0, false
}
// tenant_id=0 为全局默认菜单保留值,不允许任何接口以租户身份操作
if claims.TenantId <= 0 {
c.Data["json"] = map[string]interface{}{"code": 401, "msg": "租户ID缺失"}
_ = c.ServeJSON()
return 0, false
}
return uint64(claims.TenantId), true
}
func (c *BackendMenuFrontController) List() {
tid, ok := c.checkAuth()
if !ok {
return
}
// 全局默认菜单(tenant_id=0,不可删改)+ 租户自定义菜单
var menus []models.BackendMenuFront
_, err := models.Orm.QueryTable("yz_backend_menu_front").
Filter("tenant_id__in", []uint64{0, tid}).
Filter("delete_time__isnull", true).
OrderBy("sort", "id").
All(&menus)
if err != nil {
c.Data["json"] = map[string]interface{}{"code": 500, "msg": "查询失败"}
} else {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": menus}
}
_ = c.ServeJSON()
}
func (c *BackendMenuFrontController) Create() {
tid, ok := c.checkAuth()
if !ok {
return
}
var menu models.BackendMenuFront
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &menu); err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
_ = c.ServeJSON()
return
}
menu.TenantID = tid
menu.CreateTime = nil // 由orm自动处理
_, err := models.Orm.Insert(&menu)
if err != nil {
c.Data["json"] = map[string]interface{}{"code": 500, "msg": "创建失败"}
} else {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "创建成功"}
}
_ = c.ServeJSON()
}
func (c *BackendMenuFrontController) Update() {
id, err := strconv.ParseUint(c.Ctx.Input.Param(":id"), 10, 64)
if err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
_ = c.ServeJSON()
return
}
tid, ok := c.checkAuth()
if !ok {
return
}
var menu models.BackendMenuFront
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &menu); err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
_ = c.ServeJSON()
return
}
num, err := models.Orm.QueryTable("yz_backend_menu_front").
Filter("id", id).
Filter("tenant_id", tid).
Update(map[string]interface{}{
"pid": menu.Pid,
"title": menu.Title,
"path": menu.Path,
"component_path": menu.ComponentPath,
"icon": menu.Icon,
"sort": menu.Sort,
"status": menu.Status,
"is_visible": menu.IsVisible,
"type": menu.Type,
"permission": menu.Permission,
"update_time": time.Now(),
})
if err != nil || num == 0 {
c.Data["json"] = map[string]interface{}{"code": 500, "msg": "更新失败"}
} else {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "更新成功"}
}
_ = c.ServeJSON()
}
func (c *BackendMenuFrontController) Delete() {
id, err := strconv.ParseUint(c.Ctx.Input.Param(":id"), 10, 64)
if err != nil {
c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"}
_ = c.ServeJSON()
return
}
tid, ok := c.checkAuth()
if !ok {
return
}
num, err := models.Orm.QueryTable("yz_backend_menu_front").
Filter("id", id).
Filter("tenant_id", tid).
Update(map[string]interface{}{"delete_time": time.Now()})
if err != nil || num == 0 {
c.Data["json"] = map[string]interface{}{"code": 500, "msg": "删除失败"}
} else {
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "删除成功"}
}
_ = c.ServeJSON()
}