summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-04 17:55:21 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:43:49 +0100
commitba26387f09de20d9537d075dcea5221fb3532a5a (patch)
treee8fadab722e806ee1511ac0f996afcc9fb44ce09 /ishtar_common/models.py
parent547a20789faf6bbc9979357c7f65cbe61e56ed07 (diff)
downloadIshtar-ba26387f09de20d9537d075dcea5221fb3532a5a.tar.bz2
Ishtar-ba26387f09de20d9537d075dcea5221fb3532a5a.zip
✨ permissions refactoring: manage deletion permissions - ♻ refactoring "can_do"
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py40
1 files changed, 21 insertions, 19 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index bf2cd666a..5b2e3fdbf 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -71,7 +71,7 @@ from django.core.exceptions import (
)
from django.core.files.base import ContentFile
from django.core.files.uploadedfile import SimpleUploadedFile
-from django.db import connection
+from django.db import connection, transaction
from django.db.models import Q, Max, Count
from django.db.models.signals import post_save, post_delete, m2m_changed
from django.db.utils import DatabaseError
@@ -3440,7 +3440,8 @@ class GDPRLog(models.Model):
class ProfileType(GeneralType):
- groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True)
+ groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True,
+ related_name="profile_types")
permission_requests = models.ManyToManyField(
PermissionRequest, verbose_name=_("Permissions requests"), blank=True,
related_name="profile_types"
@@ -3652,26 +3653,27 @@ class UserProfile(models.Model):
permission_type
)
user_id = ishtar_user.user_ptr.pk
- object_permissions = []
item_ids = list(set(item_ids))
permissions = list(set(permissions))
- for permission in permissions:
- permission_id = permission.pk
- exclude = list(UserObjectPermission.objects.filter(
- content_type_id=content_type.pk, permission_id=permission_id,
- user_id=user_id
- ).values_list("object_pk", flat=True))
- object_permissions += [
- UserObjectPermission(
- object_pk=str(item_id),
- content_type_id=content_type.pk,
- permission_id=permission_id,
+ with transaction.atomic():
+ object_permissions = []
+ for permission in permissions:
+ permission_id = permission.pk
+ exclude = list(UserObjectPermission.objects.filter(
+ content_type_id=content_type.pk, permission_id=permission_id,
user_id=user_id
- )
- for item_id in item_ids if str(item_id) not in exclude
- ]
- if object_permissions:
- UserObjectPermission.objects.bulk_create(object_permissions)
+ ).values_list("object_pk", flat=True))
+ object_permissions += [
+ UserObjectPermission(
+ object_pk=str(item_id),
+ content_type_id=content_type.pk,
+ permission_id=permission_id,
+ user_id=user_id
+ )
+ for item_id in item_ids if str(item_id) not in exclude
+ ]
+ if object_permissions:
+ UserObjectPermission.objects.bulk_create(object_permissions)
def save(
self,