From: Jo-Philipp Wich Date: Wed, 2 Nov 2022 09:09:05 +0000 (+0100) Subject: luci-base: dispatcher.uc: apply ACLs to menu tree JSON X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c99602e4ac72f4f6410449dd7175d52b974de9cc;p=project%2Fluci.git luci-base: dispatcher.uc: apply ACLs to menu tree JSON Add menu tree annotations for node readonly and dependency satisfied state in order to ensure that unreachable menu nodes are hidden from view. Fixes: ded8ccf93e ("luci-base-ucode: add initial ucode based LuCI runtime") Ref: https://forum.openwrt.org/t/x/141426/10 Signed-off-by: Jo-Philipp Wich --- diff --git a/modules/luci-base/ucode/dispatcher.uc b/modules/luci-base/ucode/dispatcher.uc index 805abc4ce0..86cab9b88f 100644 --- a/modules/luci-base/ucode/dispatcher.uc +++ b/modules/luci-base/ucode/dispatcher.uc @@ -423,9 +423,24 @@ function build_pagetree() { return tree; } +function apply_tree_acls(node, acl) { + for (let name, spec in node?.children) + apply_tree_acls(spec, acl); + + if (node?.depends?.acl) { + switch (check_acl_depends(node.depends.acl, acl["access-group"])) { + case null: node.satisfied = false; break; + case false: node.readonly = true; break; + } + } +} + function menu_json(acl) { tree ??= build_pagetree(); + if (acl) + apply_tree_acls(tree, acl); + return tree; }