From 64fb7a6edb00fac497fa9ef58b2b8f49a5f8b4ed Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Tue, 19 Apr 2016 23:47:08 +0300 Subject: model: cache permissions at user object --- aconf/model/aaa.lua | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'aconf/model/aaa.lua') 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 -- cgit v1.2.3