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:
1 parent
fd463c77eb
commit
a5a1c29f01
1 file changed
+30
@@ -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)
|
||||
}
|
||||
Reference in new issue
Block a user