Skip to content

Commit

Permalink
feat: Add code relates with policyMap
Browse files Browse the repository at this point in the history
Signed-off-by: Edmond <edomondja@gmail.com>
  • Loading branch information
Edmond-J-A committed Jul 21, 2021
1 parent 4cf7737 commit d27b232
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/model/Assertion.lua
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ function Assertion:new()
o.tokens = {}
o.policy = {}
o.RM = {}

o.policyMap={}
setmetatable(o,self)
self.__index = self
return o
Expand Down
5 changes: 4 additions & 1 deletion src/model/Model.lua
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ function Model:addDef(sec, key, value)
self.model[sec][key] = Assertion:new()
self.model[sec][key].key = key
self.model[sec][key].value = value

self.model[sec][key].policyMap={}
if sec == "r" or sec == "p" then
self.model[sec][key].tokens = Util.splitCommaDelimited(self.model[sec][key].value)
for k, v in pairs(self.model[sec][key].tokens) do
Expand Down Expand Up @@ -227,6 +227,9 @@ function Model:sortPoliciesByPriority()
table.sort(ast.policy, function (a, b)
return a[priorityIndex] < b[priorityIndex]
end)
for i,policy in pairs(ast.policy) do
ast.policyMap[table.concat(policy,",")]=i
end
end
end

Expand Down
66 changes: 60 additions & 6 deletions src/model/Policy.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,30 @@ function Policy:printPolicy()
end
end

--[[
* printPolicyMap prints the policyMap to log.
]]
function Policy:printPolicyMap()
self.logger:info("policyMap: \n")
if self.model["p"] then
for k, ast in pairs(self.model["p"]) do
self.logger:info("%s: key,value", k )
for i,v in pairs(ast.policyMap) do
self.logger:info("{%s,%s}", i, v)
end
end
end

if self.model["g"] then
for k, ast in pairs(self.model["g"]) do
self.logger:info("%s: key,value", k )
for i,v in pairs(ast.policyMap) do
self.logger:info("{%s,%s}", i, v)
end
end
end
end

--[[
* savePolicyToText saves the policy to the text.
*
Expand Down Expand Up @@ -96,12 +120,14 @@ function Policy:clearPolicy()
if self.model["p"] then
for _, v in pairs(self.model["p"]) do
v.policy = {}
v.policyMap={}
end
end

if self.model["g"] then
for _, v in pairs(self.model["g"]) do
v.policy = {}
v.policyMap={}
end
end
end
Expand Down Expand Up @@ -163,12 +189,11 @@ end
* @return whether the rule exists.
]]
function Policy:hasPolicy(sec, ptype, rule)
for _, r in pairs(self.model[sec][ptype].policy) do
if Util.arrayEquals(rule, r) then
return true
end
if self.model[sec][ptype].policyMap[table.concat(rule,",")]==nil then
return false
else
return true
end
return false
end

--[[
Expand Down Expand Up @@ -200,6 +225,7 @@ end
function Policy:addPolicy(sec, ptype, rule)
if not self:hasPolicy(sec, ptype, rule) then
table.insert(self.model[sec][ptype].policy, rule)
self.model[sec][ptype].policyMap[table.concat(rule,",")]=#self.model[sec][ptype].policy
return true
end
return false
Expand All @@ -217,6 +243,7 @@ function Policy:addPolicies(sec, ptype, rules)
for _, rule in pairs(rules) do
if not self:hasPolicy(sec, ptype, rule) then
table.insert(self.model[sec][ptype].policy, rule)
self.model[sec][ptype].policyMap[table.concat(rule,",")]=#self.model[sec][ptype].policy
end
end

Expand All @@ -242,7 +269,15 @@ function Policy:updatePolicy(sec, ptype, oldRule, newRule)
for k, v in pairs(self.model[sec][ptype].policy) do
if Util.arrayEquals(oldRule, v) then
table.remove(self.model[sec][ptype].policy, k)
for policy,index in pairs(self.model[sec][ptype].policyMap) do
if index>k then
self.model[sec][ptype].policyMap[policy]=self.model[sec][ptype].policyMap[policy]-1
elseif index==k then
self.model[sec][ptype].policyMap[policy]=nil
end
end
table.insert(self.model[sec][ptype].policy, newRule)
self.model[sec][ptype].policyMap[table.concat(newRule,",")]=#self.model[sec][ptype].policy
return true
end
end
Expand Down Expand Up @@ -272,6 +307,13 @@ function Policy:removePolicy(sec, ptype, rule)
local r = self.model[sec][ptype].policy[i]
if Util.arrayEquals(r, rule) then
table.remove(self.model[sec][ptype].policy, i)
for policy,index in pairs(self.model[sec][ptype].policyMap) do
if index>i then
self.model[sec][ptype].policyMap[policy]=self.model[sec][ptype].policyMap[policy]-1
elseif index==i then
self.model[sec][ptype].policyMap[policy]=nil
end
end
return true
end
end
Expand Down Expand Up @@ -305,6 +347,13 @@ function Policy:removePoliciesWithEffected(sec, ptype, rules)
if Util.arrayEquals(rule, v) then
table.insert(effected,rule)
table.remove(self.model[sec][ptype].policy, k)
for policy,index in pairs(self.model[sec][ptype].policyMap) do
if index>k then
self.model[sec][ptype].policyMap[policy]=self.model[sec][ptype].policyMap[policy]-1
elseif index==k then
self.model[sec][ptype].policyMap[policy]=nil
end
end
break
end
end
Expand Down Expand Up @@ -346,8 +395,13 @@ function Policy:removeFilteredPolicy(sec, ptype, fieldIndex, fieldValues)
table.insert(tmp, rule)
end
end

for _,policy in pairs(self.model[sec][ptype].policy) do
self.model[sec][ptype].policyMap[table.concat(policy,",")]=nil
end
self.model[sec][ptype].policy = tmp
for i,policy in pairs(self.model[sec][ptype].policy) do
self.model[sec][ptype].policyMap[table.concat(policy,",")]=i
end
return res, effects
end

Expand Down
8 changes: 8 additions & 0 deletions src/util/Util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -270,11 +270,19 @@ function Util.loadPolicyLine(line, model)
end

model.model[sec][key].policy = model.model[sec][key].policy or {}
model.model[sec][key].policyMap={}
for i,policy in pairs(model.model[sec][key].policy) do
model.model[sec][key].policyMap[table.concat(policy,",")]=i
end
local rules = {}
for i = 2, #tokens do
table.insert(rules, tokens[i])
end
table.insert(model.model[sec][key].policy, rules)
model.model[sec][key].policyMap={}
for i,policy in pairs(model.model[sec][key].policy) do
model.model[sec][key].policyMap[table.concat(policy,",")]=i
end
end


Expand Down

0 comments on commit d27b232

Please sign in to comment.