Files
yunzerwebsiteallinone/go/controllers/backend_modules.go
T

95 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"fmt"
"strings"
"server/models"
"server/pkg/jwtutil"
"server/services"
beego "github.com/beego/beego/v2/server/web"
)
// BackendModulesController backend 模块接口(yz_system_modules)
type BackendModulesController struct {
beego.Controller
}
func (c *BackendModulesController) backendModulesClaims() (*jwtutil.Claims, error) {
auth := c.Ctx.Request.Header.Get("Authorization")
if auth == "" {
return nil, fmt.Errorf("未登录")
}
parts := strings.SplitN(auth, " ", 2)
if len(parts) != 2 || parts[0] != "Bearer" {
return nil, fmt.Errorf("认证信息格式错误")
}
claims, err := jwtutil.ParseToken(parts[1])
if err != nil {
return nil, fmt.Errorf("无效的token")
}
if claims.UserType != "backend" {
return nil, fmt.Errorf("无权访问")
}
return claims, nil
}
func (c *BackendModulesController) jsonErr(httpStatus, bizCode int, msg string) {
c.Ctx.Output.SetStatus(httpStatus)
c.Data["json"] = map[string]interface{}{"code": bizCode, "msg": msg}
_ = c.ServeJSON()
}
// moduleWithEnabled 带套餐开通标记的模块输出
type moduleWithEnabled struct {
models.SystemModules
Enabled bool `json:"enabled"`
}
// GetTenantList GET /backend/modules/getTenantList
// 返回当前 backend 账号可见的模块(status=1 且 is_show=1),并根据租户绑定的套餐标记每个模块是否已开通。
// 前端可据此排序(已开通在前)、置灰未开通卡片、阻止跳转。
func (c *BackendModulesController) GetTenantList() {
claims, err := c.backendModulesClaims()
if err != nil {
c.jsonErr(401, 401, err.Error())
return
}
var rows []models.SystemModules
_, err = models.Orm.QueryTable(new(models.SystemModules)).
Filter("delete_time__isnull", true).
Filter("status", 1).
Filter("is_show", 1).
OrderBy("sort", "id").
All(&rows)
if err != nil {
c.jsonErr(500, 500, "获取失败:"+err.Error())
return
}
// 查询当前租户套餐包含的模块 code 集合(含默认套餐回退)
tid := uint64(claims.TenantId)
allowedCodes := services.GetTenantModuleCodes(tid)
enhanced := make([]moduleWithEnabled, 0, len(rows))
for _, m := range rows {
enabled := true
if len(allowedCodes) > 0 {
enabled = allowedCodes[m.Code]
}
enhanced = append(enhanced, moduleWithEnabled{SystemModules: m, Enabled: enabled})
}
c.Data["json"] = map[string]interface{}{
"code": 200,
"msg": "获取成功",
"data": map[string]interface{}{
"list": enhanced,
"total": len(enhanced),
},
}
_ = c.ServeJSON()
}