summaryrefslogtreecommitdiffstats
path: root/aconf/model
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-24 15:37:52 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-03-25 09:02:58 +0200
commitce083b4fd25ebffca53e59413a13136a5bd59b0b (patch)
tree2948f6963bf0556d4399db2e09250506189bcc24 /aconf/model
parent90f3da7d8debb64a35be283df9e6b96e24fe282f (diff)
downloadaconf-ce083b4fd25ebffca53e59413a13136a5bd59b0b.tar.bz2
aconf-ce083b4fd25ebffca53e59413a13136a5bd59b0b.tar.xz
model: cache permissions
Diffstat (limited to 'aconf/model')
-rw-r--r--aconf/model/node.lua23
1 files changed, 16 insertions, 7 deletions
diff --git a/aconf/model/node.lua b/aconf/model/node.lua
index bd62470..c45196a 100644
--- a/aconf/model/node.lua
+++ b/aconf/model/node.lua
@@ -127,18 +127,26 @@ function M.TreeNode:init(context, params)
end
+ local permissions = {}
+
function mt.has_permission(permission)
if mt.privileged then return true end
- local p = permission..mt.path
- if getmetatable(mt.escalate).fetch('/auth/permissions')[p] then
- return mt.txn.user:check_permission(p)
- end
+ local name = permission..mt.path
+ local res = permissions[name]
+ if res ~= nil then return res end
- if ({create=true, delete=true})[permission] then
- permission = 'modify'
+ if getmetatable(mt.escalate).fetch('/auth/permissions')[name] then
+ res = mt.txn.user:check_permission(name)
+ else
+ if ({create=true, delete=true})[permission] then
+ permission = 'modify'
+ end
+ res = getmetatable(mt.parent).has_permission(permission)
end
- return getmetatable(mt.parent).has_permission(permission)
+
+ permissions[name] = res
+ return res
end
function mt.check_permission(permission)
@@ -147,6 +155,7 @@ function M.TreeNode:init(context, params)
end
end
+
function mt.removable() end
function mt.value_removable(v)