small fixes in requests system, working towards process support
This commit is contained in:
parent
10f6adc544
commit
358aacba0a
0
modpol/modules/consent.lua
Normal file
0
modpol/modules/consent.lua
Normal file
0
modpol/modules/defer_to.lua
Normal file
0
modpol/modules/defer_to.lua
Normal file
@ -288,7 +288,8 @@ function modpol.orgs:set_policy(policy_type, process, must_be_member)
|
|||||||
process = process,
|
process = process,
|
||||||
must_be_member = must_be_member
|
must_be_member = must_be_member
|
||||||
}
|
}
|
||||||
self.policies[policy_type] = policy
|
self.policies[policy_type] = new_policy
|
||||||
|
modpol.ocutil.log('Added policy for ' .. policy_type .. ' in ' .. self.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,6 +47,20 @@ function modpol.orgs.comp_req(req1, req2)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- ===============================
|
||||||
|
-- returns string of all active requests
|
||||||
|
function modpol.orgs:list_request()
|
||||||
|
local str
|
||||||
|
for id, req in ipairs(self.requests) do
|
||||||
|
if str then
|
||||||
|
str = str .. '\n' .. req.type .. ' (' .. req.user .. ') '
|
||||||
|
else
|
||||||
|
str = req.type .. ' (' .. req.user .. ') '
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return str
|
||||||
|
end
|
||||||
|
|
||||||
-- ================================
|
-- ================================
|
||||||
-- tries to make a request to the org
|
-- tries to make a request to the org
|
||||||
function modpol.orgs:make_request(request)
|
function modpol.orgs:make_request(request)
|
||||||
@ -78,13 +92,25 @@ function modpol.orgs:make_request(request)
|
|||||||
|
|
||||||
-- checking to see if user is able to make request
|
-- checking to see if user is able to make request
|
||||||
local requested_policy = self.policies[request.type]
|
local requested_policy = self.policies[request.type]
|
||||||
if requested_policy then
|
local parent_policy = modpol.orgs.get_org(self.parent).policies[request.type]
|
||||||
if requested_policy.must_be_member and not self:has_member(request.user) then
|
|
||||||
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> user must be org member to make this request')
|
-- tries to use org's policy table, defers to parent otherwise
|
||||||
|
if not requested_policy then
|
||||||
|
modpol.ocutil.log(request.type .. 'policy not found, deferring to parent org')
|
||||||
|
requested_policy = parent_policy
|
||||||
|
|
||||||
|
if not parent_policy then
|
||||||
|
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> parent policy undefined')
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- make sure user is allowed to make request
|
||||||
|
if requested_policy.must_be_member and not self:has_member(request.user) then
|
||||||
|
modpol.ocutil.log('Error in ' .. self.name .. ':make_request -> user must be org member to make this request')
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- linear search for empty process slots (lazy deletion)
|
-- linear search for empty process slots (lazy deletion)
|
||||||
for k, v in ipairs(self.requests) do
|
for k, v in ipairs(self.requests) do
|
||||||
if v == 'deleted' then
|
if v == 'deleted' then
|
||||||
@ -110,4 +136,5 @@ function modpol.orgs:make_request(request)
|
|||||||
modpol.ocutil.log("Request made")
|
modpol.ocutil.log("Request made")
|
||||||
|
|
||||||
return request_id
|
return request_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
19
modpol/tests/org_req_test.lua
Normal file
19
modpol/tests/org_req_test.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
dofile('../modpol.lua');
|
||||||
|
|
||||||
|
modpol.orgs.reset()
|
||||||
|
|
||||||
|
test_org = modpol.instance:add_org('test_org')
|
||||||
|
|
||||||
|
test_org:set_policy("add_member", nil, false);
|
||||||
|
|
||||||
|
new_request = {
|
||||||
|
user = "lukvmil",
|
||||||
|
type = "add_member",
|
||||||
|
params = {"lukvmil"}
|
||||||
|
}
|
||||||
|
|
||||||
|
request_id = test_org:make_request(new_request)
|
||||||
|
request_id = test_org:make_request(new_request)
|
||||||
|
|
||||||
|
print(test_org:list_request())
|
||||||
|
test_org:create_process(request_id)
|
Loading…
x
Reference in New Issue
Block a user