blob: 70538bbe8f38e20f63997bd972ac8ad66b06a2e9 [file]
import os
import unittest
import casbin
from casbin_sqlobject_adapter import Adapter
from casbin_sqlobject_adapter import CasbinRule
def get_fixture(path):
dir_path = os.path.split(os.path.realpath(__file__))[0] + "/"
return os.path.abspath(dir_path + path)
def get_enforcer():
con_string = 'sqlite:/:memory:'
adapter = Adapter(con_string)
CasbinRule.createTable(ifNotExists=True)
CasbinRule(ptype='p', v0='alice', v1='data1', v2='read')
CasbinRule(ptype='p', v0='bob', v1='data2', v2='write')
CasbinRule(ptype='p', v0='data2_admin', v1='data2', v2='read')
CasbinRule(ptype='p', v0='data2_admin', v1='data2', v2='write')
CasbinRule(ptype='g', v0='alice', v1='data2_admin')
return casbin.Enforcer(get_fixture('rbac_model.conf'), adapter)
class TestConfig(unittest.TestCase):
def test_enforcer_basic(self):
e = get_enforcer()
self.assertTrue(e.enforce('alice', 'data1', 'read'))
self.assertFalse(e.enforce('bob', 'data1', 'read'))
self.assertTrue(e.enforce('bob', 'data2', 'write'))
self.assertTrue(e.enforce('alice', 'data2', 'read'))
self.assertTrue(e.enforce('alice', 'data2', 'write'))
def test_add_policy(self):
e = get_enforcer()
self.assertFalse(e.enforce('eve', 'data3', 'read'))
res = e.add_permission_for_user('eve', 'data3', 'read')
self.assertTrue(res)
self.assertTrue(e.enforce('eve', 'data3', 'read'))
def test_save_policy(self):
e = get_enforcer()
self.assertFalse(e.enforce('alice', 'data4', 'read'))
model = e.get_model()
model.clear_policy()
model.add_policy('p', 'p', ['alice', 'data4', 'read'])
adapter = e.get_adapter()
adapter.save_policy(model)
self.assertTrue(e.enforce('alice', 'data4', 'read'))
def test_str(self):
rule = CasbinRule(ptype='p', v0='alice', v1='data1', v2='read')
self.assertEqual(str(rule), 'p, alice, data1, read')
def test_repr(self):
rule = CasbinRule(ptype='p', v0='alice', v1='data1', v2='read')
self.assertRegex(repr(rule), r'<CasbinRule \d+: "p, alice, data1, read">')
if(__name__=='__main__'):
unittest.main()