diff options
author | Jo-Philipp Wich <jo@mein.io> | 2020-04-20 09:33:30 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-04-20 09:44:14 +0200 |
commit | c48a8d58132b4f175ec0a4b4ec4e15eb199edeb8 (patch) | |
tree | 29f66ec2b7adac9dcf49f4780dc7e45462f1c6a4 /modules/luci-base/luasrc | |
parent | acae1378a80ca0f87ec3f29de585a6b6328a2c64 (diff) |
luci-base: dispatcher.lua: pass permission state to legacy CBI templates
Ref: https://github.com/openwrt/luci/issues/3937
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/luasrc')
-rw-r--r-- | modules/luci-base/luasrc/dispatcher.lua | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index d4ba0a95e4..d14a866737 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -1329,12 +1329,23 @@ function _cbi(self, ...) local cbi = require "luci.cbi" local tpl = require "luci.template" local http = require "luci.http" + local util = require "luci.util" local config = self.config or {} local maps = cbi.load(self.model, ...) local state = nil + local function has_uci_access(config, level) + local rv = util.ubus("session", "access", { + ubus_rpc_session = context.authsession, + scope = "uci", object = config, + ["function"] = level + }) + + return (type(rv) == "table" and rv.access == true) or false + end + local i, res for i, res in ipairs(maps) do if util.instanceof(res, cbi.SimpleForm) then @@ -1388,6 +1399,7 @@ function _cbi(self, ...) local applymap = false local pageaction = true local parsechain = { } + local writable = false for i, res in ipairs(maps) do if res.apply_needed and res.parsechain then @@ -1413,12 +1425,19 @@ function _cbi(self, ...) end for i, res in ipairs(maps) do + local is_readable_map = has_uci_access(res.config, "read") + local is_writable_map = has_uci_access(res.config, "write") + + writable = writable or is_writable_map + res:render({ firstmap = (i == 1), redirect = redirect, messages = messages, pageaction = pageaction, - parsechain = parsechain + parsechain = parsechain, + readable = is_readable_map, + writable = is_writable_map }) end @@ -1429,7 +1448,8 @@ function _cbi(self, ...) redirect = redirect, state = state, autoapply = config.autoapply, - trigger_apply = applymap + trigger_apply = applymap, + writable = writable }) end end |