summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-04 13:01:49 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-04 13:48:15 +0300
commit021bf1538afb8c8a80ed3252f30f276653d06900 (patch)
tree90f7eac73bfb7a47a7c2a62e021509e52ae56965
parentad885ed16e9c4c42976ece558d70c39e77338232 (diff)
downloadaconf-021bf1538afb8c8a80ed3252f30f276653d06900.tar.bz2
aconf-021bf1538afb8c8a80ed3252f30f276653d06900.tar.xz
model: do not automatically dereference set members
-rw-r--r--acf/model/aaa.lua4
-rw-r--r--acf/model/node.lua10
-rw-r--r--acf/model/set.lua7
3 files changed, 16 insertions, 5 deletions
diff --git a/acf/model/aaa.lua b/acf/model/aaa.lua
index 282a246..17ad98c 100644
--- a/acf/model/aaa.lua
+++ b/acf/model/aaa.lua
@@ -58,8 +58,8 @@ function User:check_permission(permission)
assert(getmetatable(self).txn:fetch('/auth/permissions')[permission])
- for _, role in M.node.pairs(self.roles) do
- for _, p in M.node.pairs(role.permissions) do
+ for _, role in M.node.pairs(self.roles, true) do
+ for _, p in M.node.pairs(role.permissions, true) do
if p == permission then return true end
end
end
diff --git a/acf/model/node.lua b/acf/model/node.lua
index 7be92cb..56d3416 100644
--- a/acf/model/node.lua
+++ b/acf/model/node.lua
@@ -51,6 +51,7 @@ function M.TreeNode:init(context)
local mt = getmetatable(self)
util.update(mt, context)
+ mt.dereference = true
mt.meta = {}
function mt.get(k, create) return mt.load(k, {create=create}) end
@@ -246,11 +247,16 @@ for _, mf in ipairs{
} do M[mf] = meta_func(mf) end
-function M.pairs(tbl)
+function M.pairs(tbl, dereference)
if not isinstance(tbl, M.TreeNode) then return pairs(tbl) end
+
local mt = getmetatable(tbl)
+ if dereference == nil then dereference = mt.dereference end
+
local res = {}
- for _, member in ipairs(mt.members()) do res[member] = mt.load(member) end
+ for _, member in ipairs(mt.members()) do
+ res[member] = mt.load(member, {dereference=dereference})
+ end
return pairs(res)
end
diff --git a/acf/model/set.lua b/acf/model/set.lua
index 695d7cb..b5b8dc3 100644
--- a/acf/model/set.lua
+++ b/acf/model/set.lua
@@ -23,9 +23,14 @@ function M.Set:init(context, params)
end
local mt = getmetatable(self)
+ mt.dereference = false
mt.meta.type = 'set'
- function mt.get(k, create) return (create or find(k)) and k end
+ function mt.get(k, create)
+ local i = find(k)
+ if i then return mt.load(i) end
+ if create then return k end
+ end
function mt.__newindex(t, k, v)
assert(v == nil)