def test_can_undo_share_resource_with_group(self): george = self.george bikes = self.bikes bikers = self.bikers alva = self.alva self.assertFalse( george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse( alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) george.uaccess.share_resource_with_group(bikes, bikers, PrivilegeCodes.CHANGE) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE) self.assertTrue( george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse( alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.undo_share_resource_with_group(bikes, bikers) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) self.assertFalse( george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertTrue( GroupResourceProvenance.get_current_record(resource=bikes, group=bikers).undone) self.assertFalse( alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.share_resource_with_group(bikes, bikers, PrivilegeCodes.VIEW) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.VIEW) self.assertTrue( george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse( GroupResourceProvenance.get_current_record(resource=bikes, group=bikers).undone) self.assertFalse( alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.undo_share_resource_with_group(bikes, bikers) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) self.assertFalse( george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse( alva.uaccess.can_undo_share_resource_with_group(bikes, bikers))
def test_groupresourceprivilege_get_current_record(self): george = self.george bikes = self.bikes bikers = self.bikers GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) record = GroupResourceProvenance.get_current_record(resource=bikes, group=bikers) self.assertEqual(record.grantor, george) self.assertEqual(record.resource, bikes) self.assertEqual(record.group, bikers)
def test_groupresourceprivilege_get_undo_groups(self): george = self.george bikes = self.bikes bikers = self.bikers GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertTrue( is_equal_to_as_set( GroupResourceProvenance.get_undo_groups(resource=bikes, grantor=george), [bikers]))
def test_groupresourceprivilege_get_current_record(self): george = self.george bikes = self.bikes bikers = self.bikers GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) record = GroupResourceProvenance.get_current_record( resource=bikes, group=bikers) self.assertEqual(record.grantor, george) self.assertEqual(record.resource, bikes) self.assertEqual(record.group, bikers)
def test_groupresourceprivilege_get_undo_groups(self): george = self.george bikes = self.bikes bikers = self.bikers GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertTrue( is_equal_to_as_set( GroupResourceProvenance.get_undo_groups( resource=bikes, grantor=george), [bikers]))
def test_groupresourceprivilege_get_privilege(self): george = self.george bikes = self.bikes bikers = self.bikers self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE)
def printGroupResourceProvenance(): print("===================================") print("GroupResourcePrivilege") priv = GroupResourcePrivilege.objects.all().order_by( 'group__id', 'resource__id') o = None for p in priv: if o is not None and (p.group != o.group or p.resource != o.resource): print("------------------------------") print(p) o = p print("===================================") print("GroupResourceProvenance") prov = GroupResourceProvenance.objects.all().order_by( 'group__id', 'resource__id', 'start') o = None for p in prov: if o is not None and (p.group != o.group or p.resource != o.resource): print("------------------------------") current = GroupResourceProvenance.get_current_record( resource=p.resource, group=p.group) star = '' if current == p: star = 'CURRENT' print((p, star)) o = p
def check_provenance_synchronization(self): for u in User.objects.all(): for r in BaseResource.objects.all(): prov = UserResourceProvenance.get_privilege(resource=r, user=u) priv = UserResourcePrivilege.get_privilege(resource=r, user=u) self.assertEqual( prov, priv, str.format("prov={}, priv={}, resource={}, user={}", prov, priv, r, u)) for u in User.objects.all(): for g in Group.objects.all(): prov = UserGroupProvenance.get_privilege(group=g, user=u) priv = UserGroupPrivilege.get_privilege(group=g, user=u) self.assertEqual( prov, priv, str.format("prov={}, priv={}, group={}, user={}", prov, priv, g, u)) for g in Group.objects.all(): for r in BaseResource.objects.all(): prov = GroupResourceProvenance.get_privilege(resource=r, group=g) priv = GroupResourcePrivilege.get_privilege(resource=r, group=g) self.assertEqual( prov, priv, str.format("prov={}, priv={}, group={}, resource={}", prov, priv, g, r))
def printGroupResourceProvenance(): print "===================================" print "GroupResourcePrivilege" priv = GroupResourcePrivilege.objects.all().order_by('group__id', 'resource__id') o = None for p in priv: if o is not None and (p.group != o.group or p.resource != o.resource): print "------------------------------" print(p) o = p print "===================================" print "GroupResourceProvenance" prov = GroupResourceProvenance.objects.all().order_by( 'group__id', 'resource__id', 'start') o = None for p in prov: if o is not None and (p.group != o.group or p.resource != o.resource): print "------------------------------" current = GroupResourceProvenance.get_current_record( resource=p.resource, group=p.group) star = '' if current == p: star = 'CURRENT' print(p, star) o = p
def test_groupresourceprivilege_get_privilege(self): george = self.george bikes = self.bikes bikers = self.bikers self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.CHANGE)
def test_can_undo_share_resource_with_group(self): george = self.george bikes = self.bikes bikers = self.bikers alva = self.alva self.assertFalse(george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse(alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) george.uaccess.share_resource_with_group(bikes, bikers, PrivilegeCodes.CHANGE) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE) self.assertTrue(george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse(alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.undo_share_resource_with_group(bikes, bikers) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) self.assertFalse(george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertTrue( GroupResourceProvenance.get_current_record(resource=bikes, group=bikers).undone) self.assertFalse(alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.share_resource_with_group(bikes, bikers, PrivilegeCodes.VIEW) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.VIEW) self.assertTrue(george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse( GroupResourceProvenance.get_current_record(resource=bikes, group=bikers).undone) self.assertFalse(alva.uaccess.can_undo_share_resource_with_group(bikes, bikers)) george.uaccess.undo_share_resource_with_group(bikes, bikers) self.assertEqual( GroupResourcePrivilege.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) self.assertFalse(george.uaccess.can_undo_share_resource_with_group(bikes, bikers)) self.assertFalse(alva.uaccess.can_undo_share_resource_with_group(bikes, bikers))
def check_provenance_synchronization(self): for u in User.objects.all(): for r in BaseResource.objects.all(): prov = UserResourceProvenance.get_privilege(resource=r, user=u) priv = UserResourcePrivilege.get_privilege(resource=r, user=u) self.assertEqual(prov, priv, str.format("prov={}, priv={}, resource={}, user={}", prov, priv, r, u)) for u in User.objects.all(): for g in Group.objects.all(): prov = UserGroupProvenance.get_privilege(group=g, user=u) priv = UserGroupPrivilege.get_privilege(group=g, user=u) self.assertEqual(prov, priv, str.format("prov={}, priv={}, group={}, user={}", prov, priv, g, u)) for g in Group.objects.all(): for r in BaseResource.objects.all(): prov = GroupResourceProvenance.get_privilege(resource=r, group=g) priv = GroupResourcePrivilege.get_privilege(resource=r, group=g) self.assertEqual(prov, priv, str.format("prov={}, priv={}, group={}, resource={}", prov, priv, g, r))
def test_groupresourceprivilege_undo_share(self): george = self.george bikes = self.bikes bikers = self.bikers self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.NONE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.VIEW, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) # further undos are prohibited with self.assertRaises(PermissionDenied): GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) with self.assertRaises(PermissionDenied): GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.VIEW, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE) GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.NONE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update(resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege(resource=bikes, group=bikers), PrivilegeCodes.CHANGE)
def test_groupresourceprivilege_undo_share(self): george = self.george bikes = self.bikes bikers = self.bikers self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.CHANGE) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.NONE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.VIEW, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.NONE) # further undos are prohibited with self.assertRaises(PermissionDenied): GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) with self.assertRaises(PermissionDenied): GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.VIEW, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.CHANGE) GroupResourceProvenance.undo_share(resource=bikes, group=bikers, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.VIEW) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.NONE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.NONE) GroupResourceProvenance.update( resource=bikes, group=bikers, privilege=PrivilegeCodes.CHANGE, grantor=george) self.assertEqual( GroupResourceProvenance.get_privilege( resource=bikes, group=bikers), PrivilegeCodes.CHANGE)