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