diff options
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 |
commit | ba26387f09de20d9537d075dcea5221fb3532a5a (patch) | |
tree | e8fadab722e806ee1511ac0f996afcc9fb44ce09 /ishtar_common/models.py | |
parent | 547a20789faf6bbc9979357c7f65cbe61e56ed07 (diff) | |
download | Ishtar-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.py | 40 |
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, |