diff --git a/djangoldp/permissions.py b/djangoldp/permissions.py index 33586c279569b05342fdc40ae208ae85420eea4c..93992334d6faba0d4dcb109e950d046b0825b59c 100644 --- a/djangoldp/permissions.py +++ b/djangoldp/permissions.py @@ -58,6 +58,7 @@ OR.get_permissions = OR_get_permissions def OR_get_filter_backend(self, model): return join_filter_backends(self.op1, self.op2, model=model, union=True) OR.get_filter_backend = OR_get_filter_backend +OR.__repr__ = lambda self: f"{self.op1}|{self.op2}" def AND_get_permissions(self, user, model, obj=None): perms1 = self.op1.get_permissions(user, model, obj) if hasattr(self.op1, 'get_permissions') else set() @@ -67,6 +68,7 @@ AND.get_permissions = AND_get_permissions def AND_get_filter_backend(self, model): return join_filter_backends(self.op1, self.op2, model=model, union=False) AND.get_filter_backend = AND_get_filter_backend +AND.__repr__ = lambda self: f"{self.op1}&{self.op2}" class LDPBasePermission(BasePermission): """ @@ -317,9 +319,13 @@ class InheritPermissions(LDPBasePermission): def get_permissions(self, user:object, model:object, obj:object=None) -> set: '''returns a union of all inheriting linked permissions''' perms = set() + parents = [] for field in InheritPermissions.get_parent_fields(model): parent_model = InheritPermissions.get_parent_model(model, field) for parent_object in self.get_parent_objects(obj, field): + parents.append(parent_object) perms = perms.union(set.intersection(*[perm().get_permissions(user, parent_model, parent_object) for perm in parent_model._meta.permission_classes])) - return perms \ No newline at end of file + if parents: + return perms + return super().get_permissions(user, model, obj) \ No newline at end of file