blob: e627b7f8459f42b5aa8f299eb61a616f66fd434e [file]
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
local Util = require("src/util/Util")
--[[
* Assertion represents an expression in a section of the model.
* For example: r = sub, obj, act
policy = {{}}
]]
local Assertion = {}
function Assertion:new()
local o = {}
o.key = ""
o.value = ""
o.tokens = {}
o.policy = {}
o.RM = {}
o.policyMap={}
o.priorityIndex=-1
setmetatable(o,self)
self.__index = self
return o
end
function Assertion:buildRoleLinks(rm)
self.RM = rm
local count = 0
for i = 1, string.len(self.value) do
if string.sub(self.value,i,i) == '_' then
count = count + 1
end
end
if count < 2 then
error("the number of '_' in role definition should be at least 2")
end
for _, rule in pairs(self.policy) do
if #rule < count then
error("grouping policy elements do not meet role definition")
end
if rule[3] then
self.RM:addLink(rule[1], rule[2], rule[3])
else
self.RM:addLink(rule[1], rule[2])
end
end
end
function Assertion:buildIncrementalRoleLinks(rm, op, rules)
self.RM = rm
local count = 0
for i = 1, string.len(self.value) do
if string.sub(self.value,i,i) == '_' then
count = count + 1
end
end
if count < 2 then
error("the number of '_' in role definition should be at least 2")
end
for _, rule in pairs(rules) do
if #rule < count then
error("grouping policy elements do not meet role definition")
end
if op == "POLICY_ADD" then
if rule[3] then
self.RM:addLink(rule[1], rule[2], rule[3])
else
self.RM:addLink(rule[1], rule[2])
end
elseif op == "POLICY_REMOVE" then
if rule[3] then
self.RM:deleteLink(rule[1], rule[2], rule[3])
else
self.RM:deleteLink(rule[1], rule[2])
end
else
error("invalid operation")
end
end
end
function Assertion:initPriorityIndex()
self.priorityIndex = -1
end
function Assertion:copy()
return Util.deepCopy(self)
end
return Assertion