diff options
-rw-r--r-- | modules/luci-base/ucode/dispatcher.uc | 15 |
1 files changed, 15 insertions, 0 deletions
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; } |