Commit 90fe50ac by Őry Máté

acl: add AclBase.set_level(whom, None)

parent c616998b
...@@ -67,8 +67,8 @@ class AclBase(Model): ...@@ -67,8 +67,8 @@ class AclBase(Model):
:param whom: user or group the level is set for :param whom: user or group the level is set for
:type whom: User or Group :type whom: User or Group
:param level: codename of level to set :param level: codename of level to set, or None
:type level: Level or str or unicode :type level: Level or str or unicode or NoneType
""" """
if isinstance(whom, User): if isinstance(whom, User):
self.set_user_level(whom, level) self.set_user_level(whom, level)
...@@ -83,17 +83,21 @@ class AclBase(Model): ...@@ -83,17 +83,21 @@ class AclBase(Model):
:param whom: user the level is set for :param whom: user the level is set for
:type whom: User :type whom: User
:param level: codename of level to set :param level: codename of level to set, or None
:type level: Level or str or unicode :type level: Level or str or unicode or NoneType
""" """
logger.info('%s.set_user_level(%s, %s) called', logger.info('%s.set_user_level(%s, %s) called',
*[unicode(p) for p in [self, user, level]]) *[unicode(p) for p in [self, user, level]])
if level is None:
pk = None
else:
if isinstance(level, basestring): if isinstance(level, basestring):
level = self.get_level_object(level) level = self.get_level_object(level)
if not self.object_level_set.filter(level_id=level.pk).exists(): if not self.object_level_set.filter(level_id=level.pk).exists():
self.object_level_set.create(level=level) self.object_level_set.create(level=level)
pk = level.pk
for i in self.object_level_set.all(): for i in self.object_level_set.all():
if i.level_id != level.pk: if i.level_id != pk:
i.users.remove(user) i.users.remove(user)
else: else:
i.users.add(user) i.users.add(user)
...@@ -110,13 +114,17 @@ class AclBase(Model): ...@@ -110,13 +114,17 @@ class AclBase(Model):
""" """
logger.info('%s.set_group_level(%s, %s) called', logger.info('%s.set_group_level(%s, %s) called',
*[unicode(p) for p in [self, group, level]]) *[unicode(p) for p in [self, group, level]])
if level is None:
pk = None
else:
if isinstance(level, basestring): if isinstance(level, basestring):
level = self.get_level_object(level) level = self.get_level_object(level)
#self.object_level_set.get_or_create(level=level, content_object=self) #self.object_level_set.get_or_create(level=level, content_object=self)
if not self.object_level_set.filter(level_id=level.pk).exists(): if not self.object_level_set.filter(level_id=level.pk).exists():
self.object_level_set.create(level=level) self.object_level_set.create(level=level)
pk = level.pk
for i in self.object_level_set.all(): for i in self.object_level_set.all():
if i.level_id != level.pk: if i.level_id != pk:
i.groups.remove(group) i.groups.remove(group)
else: else:
i.groups.add(group) i.groups.add(group)
......
...@@ -133,3 +133,17 @@ class AclUserTest(TestCase): ...@@ -133,3 +133,17 @@ class AclUserTest(TestCase):
i1 = TestModel.objects.create(normal_field='Hello') i1 = TestModel.objects.create(normal_field='Hello')
i1.set_level(self.g1, 'bravo') i1.set_level(self.g1, 'bravo')
unicode(ObjectLevel.objects.all()[0]) unicode(ObjectLevel.objects.all()[0])
def test_set_user_level_none(self):
i = TestModel.objects.create(normal_field='Hello')
i.set_level(self.u1, 'alfa')
self.assertTrue(i.has_level(self.u1, 'alfa'))
i.set_level(self.u1, None)
self.assertFalse(i.has_level(self.u1, 'alfa'))
def test_set_group_level_none(self):
i = TestModel.objects.create(normal_field='Hello')
i.set_level(self.g1, 'alfa')
self.assertTrue(i.has_level(self.u1, 'alfa'))
i.set_level(self.g1, None)
self.assertFalse(i.has_level(self.u1, 'alfa'))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment