From 707cf04f6e06a715bd67af101f6927ceca7d05e6 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Thu, 10 Sep 2020 17:35:27 +0200 Subject: [PATCH] Use get_content_type_by_perm in predicates --- aleksis/apps/alsijil/util/predicates.py | 35 +++++++++++++++++-------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py index b8db4b2a3..fdd189079 100644 --- a/aleksis/apps/alsijil/util/predicates.py +++ b/aleksis/apps/alsijil/util/predicates.py @@ -1,16 +1,14 @@ from typing import Union -from django.contrib.auth.models import User, Permission -from django.contrib.contenttypes.models import ContentType -from guardian.models import UserObjectPermission +from django.contrib.auth.models import Permission, User +from guardian.models import UserObjectPermission from guardian.shortcuts import get_objects_for_user from rules import predicate from aleksis.apps.chronos.models import LessonPeriod from aleksis.core.models import Group, Person -from aleksis.core.util.core_helpers import get_site_preferences -from aleksis.core.util.predicates import check_object_permission +from aleksis.core.util.core_helpers import get_content_type_by_perm, get_site_preferences from ..models import PersonalNote @@ -109,13 +107,18 @@ def has_person_group_object_perm(perm: str): """ name = f"has_person_group_object_perm:{perm}" - ct = ContentType.objects.get_for_model(Group) + ct = get_content_type_by_perm(perm) permissions = Permission.objects.filter(content_type=ct, codename=perm) @predicate(name) def fn(user: User, obj: Person) -> bool: groups = obj.member_of.all() - qs = UserObjectPermission.objects.filter(object_pk__in=list(groups.values_list("pk", flat=True)), content_type=ct, user=user, permission__in=permissions) + qs = UserObjectPermission.objects.filter( + object_pk__in=list(groups.values_list("pk", flat=True)), + content_type=ct, + user=user, + permission__in=permissions, + ) return qs.exists() return fn @@ -142,14 +145,19 @@ def has_lesson_group_object_perm(perm: str): """ name = f"has_lesson_group_object_perm:{perm}" - ct = ContentType.objects.get_for_model(Group) + ct = get_content_type_by_perm(perm) permissions = Permission.objects.filter(content_type=ct, codename=perm) @predicate(name) def fn(user: User, obj: LessonPeriod) -> bool: if hasattr(obj, "lesson"): groups = obj.lesson.groups.all() - qs = UserObjectPermission.objects.filter(object_pk__in=list(groups.values_list("pk", flat=True)), content_type=ct, user=user, permission__in=permissions) + qs = UserObjectPermission.objects.filter( + object_pk__in=list(groups.values_list("pk", flat=True)), + content_type=ct, + user=user, + permission__in=permissions, + ) return qs.exists() return False @@ -163,14 +171,19 @@ def has_personal_note_group_perm(perm: str): """ name = f"has_personal_note_person_or_group_perm:{perm}" - ct = ContentType.objects.get_for_model(Person) + ct = get_content_type_by_perm(perm) permissions = Permission.objects.filter(content_type=ct, codename=perm) @predicate(name) def fn(user: User, obj: PersonalNote) -> bool: if hasattr(obj, "person"): groups = obj.person.member_of.all() - qs = UserObjectPermission.objects.filter(object_pk__in=list(groups.values_list("pk", flat=True)), content_type=ct, user=user, permission__in=permissions) + qs = UserObjectPermission.objects.filter( + object_pk__in=list(groups.values_list("pk", flat=True)), + content_type=ct, + user=user, + permission__in=permissions, + ) return qs.exists() return False -- GitLab