diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-04 13:01:49 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-04 13:48:15 +0300 |
commit | 021bf1538afb8c8a80ed3252f30f276653d06900 (patch) | |
tree | 90f7eac73bfb7a47a7c2a62e021509e52ae56965 | |
parent | ad885ed16e9c4c42976ece558d70c39e77338232 (diff) | |
download | aconf-021bf1538afb8c8a80ed3252f30f276653d06900.tar.bz2 aconf-021bf1538afb8c8a80ed3252f30f276653d06900.tar.xz |
model: do not automatically dereference set members
-rw-r--r-- | acf/model/aaa.lua | 4 | ||||
-rw-r--r-- | acf/model/node.lua | 10 | ||||
-rw-r--r-- | acf/model/set.lua | 7 |
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) |