From 4cbdb5f98a2e1addd6783cd3c630b67e2bdbceaa Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Fri, 24 Jul 2020 17:22:10 +0200
Subject: [PATCH] Fixed content type bug

---
 aleksis/core/util/predicates.py | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/aleksis/core/util/predicates.py b/aleksis/core/util/predicates.py
index 5f0819903..6e50a6b38 100644
--- a/aleksis/core/util/predicates.py
+++ b/aleksis/core/util/predicates.py
@@ -1,5 +1,6 @@
 from django.contrib.auth.backends import ModelBackend
 from django.contrib.auth.models import User
+from django.contrib.contenttypes.models import ContentType
 from django.db.models import Model
 from django.http import HttpRequest
 
@@ -57,17 +58,17 @@ def has_any_object(perm: str, klass):
     """Check if has any object.
 
     Build predicate which checks whether a user has access
-    to objects with the provided permission.
+    to objects with the provided permission or rule.
     """
     name = f"has_any_object:{perm}"
 
     @predicate(name)
     def fn(user: User) -> bool:
-        return (
-            get_objects_for_user(user, perm, klass).exists()
-            or queryset_rules_filter(user, klass.objects.all(), perm).exists()
-        )
-
+        ct_perm = ContentType.objects.get(app_label=perm.split('.', 1)[0], permission__codename=perm.split('.', 1)[1])
+        if ct_perm and ct_perm.model_class() == klass:
+            return get_objects_for_user(user, perm, klass).exists()
+        else:
+            return queryset_rules_filter(user, klass.objects.all(), perm).exists()
     return fn
 
 
-- 
GitLab