Skip to content
Snippets Groups Projects
Verified Commit 93c6d3bb authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Look up content type amd permissions inside generated function

Closes #126 — module loading must not have side effects, and
generating the predicates calls the database.

Under normal operation, cache_memoize and/or django-cachalot ensure
the database lookup is not done on every permission check.
parent 891584bf
1 merge request!122Resolve "`aleksis-admin yarn install` needs a database"
Pipeline #5306 failed
......@@ -113,11 +113,10 @@ def has_person_group_object_perm(perm: str):
"""
name = f"has_person_group_object_perm:{perm}"
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:
ct = get_content_type_by_perm(perm)
permissions = Permission.objects.filter(content_type=ct, codename=perm)
groups = obj.member_of.all()
qs = UserObjectPermission.objects.filter(
object_pk__in=list(groups.values_list("pk", flat=True)),
......@@ -151,13 +150,12 @@ def has_lesson_group_object_perm(perm: str):
"""
name = f"has_lesson_group_object_perm:{perm}"
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()
ct = get_content_type_by_perm(perm)
permissions = Permission.objects.filter(content_type=ct, codename=perm)
qs = UserObjectPermission.objects.filter(
object_pk__in=list(groups.values_list("pk", flat=True)),
content_type=ct,
......@@ -177,12 +175,11 @@ def has_personal_note_group_perm(perm: str):
"""
name = f"has_personal_note_person_or_group_perm:{perm}"
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"):
ct = get_content_type_by_perm(perm)
permissions = Permission.objects.filter(content_type=ct, codename=perm)
groups = obj.person.member_of.all()
qs = UserObjectPermission.objects.filter(
object_pk__in=list(groups.values_list("pk", flat=True)),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment