diff --git a/circle/acl/models.py b/circle/acl/models.py index a47067a..2bce06d 100644 --- a/circle/acl/models.py +++ b/circle/acl/models.py @@ -71,6 +71,17 @@ class AclBase(Model): """Define permission levels for Users/Groups per object.""" object_level_set = GenericRelation(ObjectLevel) + def clone_acl(self, other): + """Clone full ACL from other object.""" + assert self.id != other.id or type(self) != type(other) + self.object_level_set.clear() + for i in other.object_level_set.all(): + ol = self.object_level_set.create(level=i.level) + for j in i.users.all(): + ol.users.add(j) + for j in i.groups.all(): + ol.groups.add(j) + @classmethod def get_level_object(cls, level):