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 <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2022-11-02 10:09:05 +01:00
parent d967bbaa92
commit c99602e4ac

View file

@ -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;
}