From ce083b4fd25ebffca53e59413a13136a5bd59b0b Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Mon, 24 Mar 2014 15:37:52 +0200 Subject: model: cache permissions --- aconf/model/node.lua | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'aconf') 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) -- cgit v1.2.3