blob: 855eb8414a5bccffa77054b3354c37aa0fcd8c8d [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.
from unittest import TestCase
from casbin.model import Model
from tests.test_enforcer import get_examples
class TestPolicy(TestCase):
def test_get_policy(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
rule = ["admin", "domain1", "data1", "read"]
m.add_policy("p", "p", rule)
self.assertTrue(m.get_policy("p", "p") == [rule])
def test_has_policy(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
rule = ["admin", "domain1", "data1", "read"]
m.add_policy("p", "p", rule)
self.assertTrue(m.has_policy("p", "p", rule))
def test_add_policy(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
rule = ["admin", "domain1", "data1", "read"]
self.assertFalse(m.has_policy("p", "p", rule))
m.add_policy("p", "p", rule)
self.assertTrue(m.has_policy("p", "p", rule))
def test_add_role_policy(self):
m = Model()
m.load_model(get_examples("rbac_model.conf"))
p_rule1 = ["alice", "data1", "read"]
m.add_policy("p", "p", p_rule1)
self.assertTrue(m.has_policy("p", "p", p_rule1))
p_rule2 = ["data2_admin", "data2", "read"]
m.add_policy("p", "p", p_rule2)
self.assertTrue(m.has_policy("p", "p", p_rule2))
g_rule = ["alice", "data2_admin"]
m.add_policy("g", "g", g_rule)
self.assertTrue(m.has_policy("g", "g", g_rule))
self.assertTrue(m.get_policy("p", "p") == [p_rule1, p_rule2])
self.assertTrue(m.get_policy("g", "g") == [g_rule])
def test_update_policy(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
old_rule = ["admin", "domain1", "data1", "read"]
new_rule = ["admin", "domain1", "data2", "read"]
m.add_policy("p", "p", old_rule)
self.assertTrue(m.has_policy("p", "p", old_rule))
m.update_policy("p", "p", old_rule, new_rule)
self.assertFalse(m.has_policy("p", "p", old_rule))
self.assertTrue(m.has_policy("p", "p", new_rule))
m = Model()
m.load_model(get_examples("priority_model_explicit.conf"))
old_rule = ["1", "admin", "data1", "read", "allow"]
new_rule = ["1", "admin", "data2", "read", "allow"]
m.add_policy("p", "p", old_rule)
self.assertTrue(m.has_policy("p", "p", old_rule))
m.update_policy("p", "p", old_rule, new_rule)
self.assertFalse(m.has_policy("p", "p", old_rule))
self.assertTrue(m.has_policy("p", "p", new_rule))
def test_update_policies(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
old_rules = [
["admin", "domain1", "data1", "read"],
["admin", "domain1", "data2", "read"],
["admin", "domain1", "data3", "read"],
]
new_rules = [
["admin", "domain1", "data4", "read"],
["admin", "domain1", "data5", "read"],
["admin", "domain1", "data6", "read"],
]
m.add_policies("p", "p", old_rules)
for old_rule in old_rules:
self.assertTrue(m.has_policy("p", "p", old_rule))
m.update_policies("p", "p", old_rules, new_rules)
for old_rule in old_rules:
self.assertFalse(m.has_policy("p", "p", old_rule))
for new_rule in new_rules:
self.assertTrue(m.has_policy("p", "p", new_rule))
m = Model()
m.load_model(get_examples("priority_model_explicit.conf"))
old_rules = [
["1", "admin", "data1", "read", "allow"],
["1", "admin", "data2", "read", "allow"],
["1", "admin", "data3", "read", "allow"],
]
new_rules = [
["1", "admin", "data4", "read", "allow"],
["1", "admin", "data5", "read", "allow"],
["1", "admin", "data6", "read", "allow"],
]
m.add_policies("p", "p", old_rules)
for old_rule in old_rules:
self.assertTrue(m.has_policy("p", "p", old_rule))
m.update_policies("p", "p", old_rules, new_rules)
for old_rule in old_rules:
self.assertFalse(m.has_policy("p", "p", old_rule))
for new_rule in new_rules:
self.assertTrue(m.has_policy("p", "p", new_rule))
def test_remove_policy(self):
m = Model()
m.load_model(get_examples("basic_model.conf"))
rule = ["admin", "domain1", "data1", "read"]
m.add_policy("p", "p", rule)
self.assertTrue(m.has_policy("p", "p", rule))
m.remove_policy("p", "p", rule)
self.assertFalse(m.has_policy("p", "p", rule))
self.assertFalse(m.remove_policy("p", "p", rule))
def test_remove_filtered_policy(self):
m = Model()
m.load_model(get_examples("rbac_with_domains_model.conf"))
rule = ["admin", "domain1", "data1", "read"]
m.add_policy("p", "p", rule)
res = m.remove_filtered_policy("p", "p", 1, "domain1", "data1")
self.assertTrue(res)
res = m.remove_filtered_policy("p", "p", 1, "domain1", "data1")
self.assertFalse(res)