This commit is contained in:
hero920103 committed 2026-10-19 01:13:17 +08:00
1 parent 5718a00e31
commit 1850ac640e
226 files changed
+37772 -12071

No files matched your search

+41 -42
View File
@@ -2,7 +2,6 @@ package controllers
import (
"encoding/json"
"fmt"
"io"
"sort"
"strconv"
@@ -10,6 +9,7 @@ import (
"time"
"server/models"
"server/pkg/identity"
"server/pkg/jwtutil"
"github.com/beego/beego/v2/client/orm"
@@ -35,34 +35,17 @@ func (c *BackendArticleCategoryController) cmsClaims() (*jwtutil.Claims, error)
}
func cmsBackendClaims(c *beego.Controller) (*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
return identity.Claims(c.Ctx.Request.Header.Get("Authorization"), identity.EndBackend)
}
// cmsEffectiveTid 取当前 CMS 请求的租户 ID。
//
// 只认令牌 claims,不认 ?tid= 与 X-Tenant-Id:这两个入参此前会覆盖登录态,
// 任何 backend 账号改一下参数就能读写别的企业站点内容。
// 前端仍会带自己的 tid(同值),忽略即可,不影响正常调用。
// 公开门户的租户解析走 cmsPortalTid(无登录态,按域名/参数定位站点),不在此列。
func cmsEffectiveTid(c *beego.Controller, claims *jwtutil.Claims) uint64 {
_ = c.ParseForm(1 << 20)
if tid, err := c.GetUint64("tid"); err == nil && tid > 0 {
return tid
}
if h := strings.TrimSpace(c.Ctx.Request.Header.Get("X-Tenant-Id")); h != "" {
if v, e := strconv.ParseUint(h, 10, 64); e == nil {
return v
}
}
_ = c.ParseForm(1 << 20) // 部分调用方依赖这里触发表单解析
if claims != nil && claims.TenantId > 0 {
return uint64(claims.TenantId)
}
@@ -171,7 +154,8 @@ func cmsCategoryToMap(row models.CmsArticleCategory) map[string]interface{} {
func (c *BackendArticleController) ContentStats() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -250,7 +234,8 @@ func (c *BackendArticleController) ContentStats() {
func (c *BackendArticleController) List() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -334,7 +319,8 @@ func (c *BackendArticleController) ListAll() {
func (c *BackendArticleController) Detail() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -390,7 +376,8 @@ type cmsArticlePayload struct {
func (c *BackendArticleController) Create() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -459,7 +446,8 @@ func (c *BackendArticleController) Create() {
func (c *BackendArticleController) Update() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -515,7 +503,8 @@ func (c *BackendArticleController) Update() {
func (c *BackendArticleController) Delete() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -547,7 +536,8 @@ func (c *BackendArticleController) Delete() {
func (c *BackendArticleController) setArticleFlag(field string, value int8) {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -580,7 +570,8 @@ func (c *BackendArticleController) setArticleFlag(field string, value int8) {
func (c *BackendArticleController) Publish() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -631,7 +622,8 @@ func (c *BackendArticleController) Publish() {
func (c *BackendArticleController) Unpublish() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -669,7 +661,8 @@ func (c *BackendArticleController) Untop() { c.setArticleFlag("top", 0) }
func (c *BackendArticleCategoryController) List() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -725,7 +718,8 @@ func (c *BackendArticleCategoryController) List() {
func (c *BackendArticleCategoryController) ListAll() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -763,7 +757,8 @@ func (c *BackendArticleCategoryController) ListAll() {
func (c *BackendArticleCategoryController) Detail() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -806,7 +801,8 @@ type cmsCategoryPayload struct {
func (c *BackendArticleCategoryController) Create() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -857,7 +853,8 @@ func (c *BackendArticleCategoryController) Create() {
func (c *BackendArticleCategoryController) Update() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -923,7 +920,8 @@ func (c *BackendArticleCategoryController) Update() {
func (c *BackendArticleCategoryController) Delete() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)
@@ -989,7 +987,8 @@ func (c *BackendArticleCategoryController) Delete() {
func (c *BackendArticleCategoryController) UpdateStatus() {
claims, err := c.cmsClaims()
if err != nil {
c.cmsJSONErr(401, 401, err.Error())
code := identity.Status(err)
c.cmsJSONErr(code, code, err.Error())
return
}
tid := cmsEffectiveTid(&c.Controller, claims)