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>
This commit is contained in:
wuzilongandCursor committed 2026-09-11 22:42:45 +08:00
1 parent fd463c77eb
commit a5a1c29f01
1 file changed
+30
+30
View File
@@ -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)
}