[Patchew-devel] [PATCH 5/9] rest: simplify PatchewPermission

Paolo Bonzini pbonzini at redhat.com
Sat Aug 18 08:39:40 UTC 2018


Because has_permission is always invoked before has_object_permission,
and both must pass for the request to be allowed, it is not necessary
to check obj.project.maintained_by for messages.

Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
---
 api/rest.py | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/api/rest.py b/api/rest.py
index 646d6ad..2b0b611 100644
--- a/api/rest.py
+++ b/api/rest.py
@@ -48,9 +48,6 @@ class PatchewPermission(permissions.BasePermission):
     def has_project_permission(self, request, view, obj):
         return obj.maintained_by(request.user)
 
-    def has_message_permission(self, request, view, obj):
-        return obj.project.maintained_by(request.user)
-
     def has_group_permission(self, request, view):
         for grp in request.user.groups.all():
             if grp.name in self.allowed_groups:
@@ -68,11 +65,12 @@ class PatchewPermission(permissions.BasePermission):
                 self.has_project_permission(request, view, view.project))
 
     def has_object_permission(self, request, view, obj):
+        # For non-project objects, has_project_permission has been evaluated
+        # already in has_permission, based on the primary key included in the
+        # URL.
         return self.has_generic_permission(request, view) or \
-               (isinstance(obj, Message) and \
-                self.has_message_permission(request, view, obj)) or \
-               (isinstance(obj, Project) and \
-                self.has_project_permission(request, view, obj))
+               not isinstance(obj, Project) or \
+               self.has_project_permission(request, view, obj)
 
 class ImportPermission(PatchewPermission):
     allowed_groups = ('importers',)
-- 
2.17.1





More information about the Patchew-devel mailing list