Browse Source

feat(miniprogram): add workbench menu permission filter helper.

Pure function filters modules by menuAll or mini:db:* menuCodes.

Co-authored-by: Cursor <cursoragent@cursor.com>
wuzilong 1 tháng trước cách đây
mục cha
commit
a5a1c29f01
1 tập tin đã thay đổi với 30 bổ sung và 0 xóa
  1. 30 0
      miniprogram/utils/workbenchMenuFilter.js

+ 30 - 0
miniprogram/utils/workbenchMenuFilter.js

@@ -0,0 +1,30 @@
+/**
+ * 按菜单权限过滤工作台模块。
+ * @param {Array} modules WORKBENCH_MODULES 风格数组
+ * @param {{ menuAll?: boolean, menuCodes?: string[] }} auth
+ * @returns {Array} 过滤后的模块(menus 已裁剪;无叶子的模块去掉)
+ */
+export function filterWorkbenchModules(modules, auth) {
+  const list = Array.isArray(modules) ? modules : []
+  const menuAll = !!(auth && auth.menuAll)
+  const codeSet = new Set(
+    (auth && Array.isArray(auth.menuCodes) ? auth.menuCodes : [])
+      .map((c) => String(c || '').trim())
+      .filter(Boolean)
+  )
+
+  return list
+    .filter((m) => m && m.visible !== false)
+    .map((m) => {
+      const menus = Array.isArray(m.menus) ? m.menus : []
+      const nextMenus = menus.filter((item) => {
+        if (!item || item.enabled === false) return false
+        if (menuAll) return true
+        const p = item.perms
+        if (!p) return false
+        return codeSet.has(String(p))
+      })
+      return { ...m, menus: nextMenus }
+    })
+    .filter((m) => m.menus.length > 0)
+}