blob: 84edb37a38fb17f1ddb817b56d2186eddf9d61e6 [file] [log] [blame]
--Copyright 2021 The casbin Authors. All Rights Reserved.
--
--Licensed 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
--
-- http://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 Enforcer = require("src.main.Enforcer")
local Util = require("src.util.Util")
local path = os.getenv("PWD") or io.popen("cd"):read()
describe("Management API tests", function ()
it("Get Subjects, Objects, Actions, Roles test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.Same({"alice", "bob", "data2_admin"}, e:GetAllSubjects())
assert.is.Same({"data1", "data2"}, e:GetAllObjects())
assert.is.Same({"read", "write"}, e:GetAllActions())
assert.is.Same({"data2_admin"}, e:GetAllRoles())
assert.is.Same({"alice", "bob", "data2_admin"}, e:GetAllNamedSubjects("p"))
assert.is.Same({"data1", "data2"}, e:GetAllNamedObjects("p"))
assert.is.Same({"read", "write"}, e:GetAllNamedActions("p"))
assert.is.Same({"data2_admin"}, e:GetAllNamedRoles("g"))
end)
it("Get Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local res = {
{"alice", "data1", "read"},
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.True(Util.array2DEquals(e:GetPolicy(), res))
end)
it("Get Filtered Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local res = {
{"bob", "data2", "write"}
}
assert.is.Same(res, e:GetFilteredPolicy(0, "bob"))
res = {
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(res, e:GetFilteredPolicy(1, "data2"))
end)
it("Get Grouping Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local res = {
{"alice", "data2_admin"}
}
assert.is.Same(res, e:GetGroupingPolicy())
end)
it("Get Filtered Grouping Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local res = {
{"alice", "data2_admin"}
}
assert.is.Same(res, e:GetFilteredGroupingPolicy(0, "alice"))
end)
it("Has Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.True(e:HasPolicy("alice", "data1", "read"))
assert.is.False(e:HasPolicy("bob", "data2", "read"))
assert.is.True(e:HasPolicy("bob", "data2", "write"))
end)
it("Has Grouping Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.True(e:HasGroupingPolicy("alice", "data2_admin"))
assert.is.False(e:HasGroupingPolicy("bob", "data2_admin"))
end)
it("Modify Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local res = {
{"alice", "data1", "read"},
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(res, e:GetPolicy())
e:RemovePolicy("alice", "data1", "read")
e:RemovePolicy("bob", "data2", "write")
e:RemovePolicy("alice", "data1", "read")
e:AddPolicy("eve", "data3", "read")
e:AddPolicy("eve", "data3", "read")
local rules = {
{"jack", "data4", "read"},
{"jack", "data4", "read"},
{"jack", "data4", "read"},
{"katy", "data4", "write"},
{"leyo", "data4", "read"},
{"katy", "data4", "write"},
{"katy", "data4", "write"},
{"ham", "data4", "write"}
}
e:AddPolicies(rules)
e:AddPolicies(rules)
res = {
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"},
{"eve", "data3", "read"},
{"jack", "data4", "read"},
{"katy", "data4", "write"},
{"leyo", "data4", "read"},
{"ham", "data4", "write"}
}
assert.is.Same(res, e:GetPolicy())
e:RemovePolicies(rules)
e:RemovePolicies(rules)
local namedPolicy = {"eve", "data3", "read"}
e:RemoveNamedPolicy("p", namedPolicy)
e:AddNamedPolicy("p", namedPolicy)
res = {
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"},
{"eve", "data3", "read"}
}
assert.is.Same(res, e:GetPolicy())
e:RemoveFilteredPolicy(1, "data2")
assert.is.Same({{"eve", "data3", "read"}}, e:GetPolicy())
e:UpdatePolicy({"eve", "data3", "read"}, {"eve", "data3", "write"})
assert.is.Same({{"eve", "data3", "write"}}, e:GetPolicy())
e:AddPolicies(rules)
e:RemovePolicies({{"eve", "data3", "write"}, {"leyo", "data4", "read"}, {"katy", "data4", "write"}})
e:AddPolicies({{"eve", "data3", "read"}, {"leyo", "data4", "write"}, {"katy", "data1", "write"}})
assert.is.True(e:HasPolicy("eve", "data3", "read"))
assert.is.True(e:HasPolicy("jack", "data4", "read"))
assert.is.True(e:HasPolicy("katy", "data1", "write"))
assert.is.True(e:HasPolicy("leyo", "data4", "write"))
assert.is.True(e:HasPolicy("ham", "data4", "write"))
end)
it("Modify Grouping Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.True(e:HasGroupingPolicy("alice", "data2_admin"))
local res = {
{"alice", "data2_admin"}
}
assert.is.Same(res, e:GetGroupingPolicy())
e:AddGroupingPolicy("bob", "data2_admin")
res = {
{"alice", "data2_admin"},
{"bob", "data2_admin"}
}
assert.is.Same(res, e:GetGroupingPolicy())
e:RemoveGroupingPolicy("bob", "data2_admin")
local rules = {
{"cathy", "data2_admin"},
{"eve", "data2_admin"}
}
e:AddGroupingPolicies(rules)
res = {
{"alice", "data2_admin"},
{"cathy", "data2_admin"},
{"eve", "data2_admin"}
}
assert.is.Same(res, e:GetGroupingPolicy())
e:RemoveGroupingPolicies(rules)
assert.is.Same({{"alice", "data2_admin"}}, e:GetGroupingPolicy())
e:UpdateGroupingPolicy({"alice", "data2_admin"}, {"bob", "data2_admin"})
assert.is.Same({{"bob", "data2_admin"}}, e:GetGroupingPolicy())
e:UpdateGroupingPolicy({"bob", "data2_admin"}, {"alice", "data2_admin"})
rules = {
{"alice", "data1_admin"},
{"bob", "data1_admin"},
{"eve", "data2_admin"}
}
e:AddGroupingPolicies(rules)
res = {
{"alice", "data1_admin"},
{"bob", "data1_admin"},
}
assert.is.Same(res, e:GetFilteredGroupingPolicy(1, "data1_admin"))
e:RemoveFilteredGroupingPolicy(1, "data1_admin")
res = {
{"alice", "data2_admin"},
{"eve", "data2_admin"}
}
assert.is.Same(res, e:GetGroupingPolicy())
end)
end)