diff options
Diffstat (limited to 'aconf/model/aaa.lua')
-rw-r--r-- | aconf/model/aaa.lua | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/aconf/model/aaa.lua b/aconf/model/aaa.lua index 3f62ef0..982e5b3 100644 --- a/aconf/model/aaa.lua +++ b/aconf/model/aaa.lua @@ -1,5 +1,5 @@ --[[ -Copyright (c) 2012-2015 Kaarle Ritvanen +Copyright (c) 2012-2016 Kaarle Ritvanen See LICENSE file for license details --]] @@ -56,14 +56,19 @@ function User:check_password(password) end function User:check_permission(permission) - assert(self:fetch('/aaa/permissions')[permission]) - - for _, role in node.pairs(self.roles, true) do - for _, p in node.pairs(role.permissions, true) do - if p == permission then return true end + local mt = getmetatable(self) + if not mt.permissions then + mt.permissions = {} + for _, p in pairs(self:fetch('../../permissions')) do + mt.permissions[p] = false + end + for _, role in node.pairs(self.roles, true) do + for _, p in node.pairs(role.permissions, true) do + mt.permissions[p] = true + end end end - return false + return mt.permissions[permission] end |