批量优化

This commit is contained in:
hero920103 committed 2026-10-08 15:30:37 +08:00
1 parent 438145cae7
commit c925b198d1
50 files changed
+5716 -291

No files matched your search

+51
View File
@@ -7,6 +7,7 @@ import (
"server/models"
"server/pkg/jwtutil"
"server/services"
authsvc "server/services/auth"
beego "github.com/beego/beego/v2/server/web"
)
@@ -48,6 +49,24 @@ func (c *BackendModulesController) jsonErr(httpStatus, bizCode int, msg string)
_ = c.ServeJSON()
}
// backendUserGroupID 解析当前登录者在当前租户的角色ID。
// claims.UserID 是认证中心 identity_id,不能直接当 yz_system_tenant_user 主键用;
// 优先按认证绑定表(identity_id+tid → group_id,与 /auth/userinfo 同源),
// 查不到再走业务表身份解析链(identity_id 换算 → 主键 → 老 uid)。
func (c *BackendModulesController) backendUserGroupID(claims *jwtutil.Claims, tid uint64) uint64 {
uid := uint64(claims.UserID)
if uid == 0 {
return 0
}
if bind, e := authsvc.GetTenantUser(uid, tid); e == nil {
return bind.GroupID
}
if tu, e := findBackendTenantUser(uid, tid, false); e == nil {
return tu.GroupID
}
return 0
}
// moduleWithEnabled 带套餐开通标记的模块输出
type moduleWithEnabled struct {
models.SystemModules
@@ -91,6 +110,38 @@ func (c *BackendModulesController) GetTenantList() {
enhanced = append(enhanced, moduleWithEnabled{SystemModules: m, Enabled: enabled})
}
// 角色权限过滤(与 /backend/menu/:id 同口径):
// 未分配角色或角色 rights 为空 → 全部可见;
// 否则仅保留「名下至少有一个被授权菜单」的模块,未授权模块直接不返回,
// 避免首页出现可点击却进 404 的模块卡片。
if groupID := c.backendUserGroupID(claims, tid); groupID > 0 {
var role models.AdminRole
if re := models.Orm.QueryTable(new(models.AdminRole)).
Filter("id", groupID).
Filter("cid", 2).
One(&role); re == nil && role.Rights != nil && strings.TrimSpace(*role.Rights) != "" {
if len(parseRightsToSet(*role.Rights)) > 0 {
var allMenus []models.SystemMenu
if _, me := models.Orm.QueryTable(new(models.SystemMenu)).Filter("status", 1).All(&allMenus); me == nil {
allowedMenus := filterMenusByRights(allMenus, role.Rights)
owningAny := services.ModuleCodesOwningMenus(rows, allMenus)
owningAllowed := services.ModuleCodesOwningMenus(rows, allowedMenus)
visible := make([]moduleWithEnabled, 0, len(enhanced))
for _, item := range enhanced {
code := services.NormalizeModuleCode(item.Code)
// 模块名下有菜单但一个都没授权 → 隐藏;
// 名下没有菜单(无法判定)→ 保持原行为不隐藏
if owningAny[code] && !owningAllowed[code] {
continue
}
visible = append(visible, item)
}
enhanced = visible
}
}
}
}
c.Data["json"] = map[string]interface{}{
"code": 200,
"msg": "获取成功",