From c026e399f16834a6c8529da157ae8f91aca7c068 Mon Sep 17 00:00:00 2001 From: mhewel <58829786+mhewel@users.noreply.github.com> Date: Fri, 29 Mar 2024 11:16:39 +0100 Subject: [PATCH] Medlemmer af SEK kan nu se alle afdelinger,foreninger og relaterede objekter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tilføjede rettigheder: "view_all_unions": se alle foreninger. "view_all_departments": Se alle afdelinger. Rettede Aktiviteter, Invitation, Deltager, Afdelinger, Foreninger, Adresser til at bruge de nye rettigheder. SEK gruppen skal have to nye rettigheder --- members/admin/activity_admin.py | 4 ++- members/admin/activityinvite_admin.py | 4 ++- members/admin/activityparticipant_admin.py | 4 ++- members/admin/department_admin.py | 4 ++- members/admin/union_admin.py | 4 ++- ..._department_options_alter_union_options.py | 30 +++++++++++++++++++ members/models/address.py | 27 ++++++++++++----- members/models/department.py | 1 + members/models/union.py | 1 + 9 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 members/migrations/0046_alter_department_options_alter_union_options.py diff --git a/members/admin/activity_admin.py b/members/admin/activity_admin.py index 516d64cc..718704d9 100644 --- a/members/admin/activity_admin.py +++ b/members/admin/activity_admin.py @@ -177,7 +177,9 @@ def activity_membership_union_link(self, obj): # Only view activities on own department def get_queryset(self, request): qs = super(ActivityAdmin, self).get_queryset(request) - if request.user.is_superuser: + if request.user.is_superuser or request.user.has_perm( + "members.view_all_departments" + ): return qs departments = Department.objects.filter(adminuserinformation__user=request.user) return qs.filter(department__in=departments) diff --git a/members/admin/activityinvite_admin.py b/members/admin/activityinvite_admin.py index 97871eac..343eb90b 100644 --- a/members/admin/activityinvite_admin.py +++ b/members/admin/activityinvite_admin.py @@ -161,7 +161,9 @@ class Meta: # Only show invitation to own activities def get_queryset(self, request): qs = super(ActivityInviteAdmin, self).get_queryset(request) - if request.user.is_superuser: + if request.user.is_superuser or request.user.has_perm( + "members.view_all_departments" + ): return qs return qs.filter(activity__department__adminuserinformation__user=request.user) diff --git a/members/admin/activityparticipant_admin.py b/members/admin/activityparticipant_admin.py index 023398ba..772b96b3 100644 --- a/members/admin/activityparticipant_admin.py +++ b/members/admin/activityparticipant_admin.py @@ -244,7 +244,9 @@ def person_zipcode(self, item): # Only show participants to own departments def get_queryset(self, request): qs = super(ActivityParticipantAdmin, self).get_queryset(request) - if request.user.is_superuser: + if request.user.is_superuser or request.user.has_perm( + "members.view_all_departments" + ): return qs return qs.filter(activity__department__adminuserinformation__user=request.user) diff --git a/members/admin/department_admin.py b/members/admin/department_admin.py index 31c46e25..04fe1973 100644 --- a/members/admin/department_admin.py +++ b/members/admin/department_admin.py @@ -65,7 +65,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs): def get_queryset(self, request): qs = super(DepartmentAdmin, self).get_queryset(request) - if request.user.is_superuser: + if request.user.is_superuser or request.user.has_perm( + "members.view_all_departments" + ): return qs return qs.filter(adminuserinformation__user=request.user) diff --git a/members/admin/union_admin.py b/members/admin/union_admin.py index c8537d41..edda6fe7 100644 --- a/members/admin/union_admin.py +++ b/members/admin/union_admin.py @@ -49,7 +49,9 @@ def formfield_for_manytomany(self, db_field, request, **kwargs): def get_queryset(self, request): qs = super(UnionAdmin, self).get_queryset(request) - if request.user.is_superuser: + if request.user.is_superuser or request.user.has_perm( + "members.view_all_unions" + ): return qs return qs.filter(adminuserinformation__user=request.user) diff --git a/members/migrations/0046_alter_department_options_alter_union_options.py b/members/migrations/0046_alter_department_options_alter_union_options.py new file mode 100644 index 00000000..50f3014a --- /dev/null +++ b/members/migrations/0046_alter_department_options_alter_union_options.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2 on 2024-03-29 09:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("members", "0045_activityinvite_extra_email_info_and_more"), + ] + + operations = [ + migrations.AlterModelOptions( + name="department", + options={ + "ordering": ["address__zipcode"], + "permissions": (("view_all_departments", "Can view all Afdelinger"),), + "verbose_name": "Afdeling", + "verbose_name_plural": "Afdelinger", + }, + ), + migrations.AlterModelOptions( + name="union", + options={ + "ordering": ["name"], + "permissions": (("view_all_unions", "Can view all Foreninger"),), + "verbose_name": "Forening", + "verbose_name_plural": "Foreninger", + }, + ), + ] diff --git a/members/models/address.py b/members/models/address.py index b3413c15..ba9092a8 100644 --- a/members/models/address.py +++ b/members/models/address.py @@ -115,14 +115,25 @@ def get_by_dawa_id(dawa_id): def get_user_addresses(user): if user.is_superuser: return Address.objects.all() - department_address_id = [ - department.address.id - for department in Department.objects.filter(adminuserinformation__user=user) - ] - union_address_id = [ - union.address.id - for union in Union.objects.filter(adminuserinformation__user=user) - ] + if user.has_perm("members.view_all_departments"): + department_address_id = [ + department.address.id for department in Department.objects.all() + ] + else: + department_address_id = [ + department.address.id + for department in Department.objects.filter( + adminuserinformation__user=user + ) + ] + + if user.has_perm("members.view_all_unions"): + union_address_id = [union.address.id for union in Union.objects.all()] + else: + union_address_id = [ + union.address.id + for union in Union.objects.filter(adminuserinformation__user=user) + ] # Find all addresses not used by Union nor Department address_id_all = [address.id for address in Address.objects.all()] diff --git a/members/models/department.py b/members/models/department.py index d759592b..570a6d06 100644 --- a/members/models/department.py +++ b/members/models/department.py @@ -10,6 +10,7 @@ class Meta: verbose_name_plural = "Afdelinger" verbose_name = "Afdeling" ordering = ["address__zipcode"] + permissions = (("view_all_departments", "Can view all Afdelinger"),) help_dept = """Vi tilføjer automatisk "Coding Pirates" foran navnet når vi nævner det de fleste steder på siden.""" diff --git a/members/models/union.py b/members/models/union.py index e958cf32..f7c8eefa 100644 --- a/members/models/union.py +++ b/members/models/union.py @@ -10,6 +10,7 @@ class Meta: verbose_name_plural = "Foreninger" verbose_name = "Forening" ordering = ["name"] + permissions = (("view_all_unions", "Can view all Foreninger"),) help_union = """Vi tilføjer automatisk "Coding Pirates" foran navnet når vi nævner det de fleste steder på siden.""" name = models.CharField("Foreningens navn", max_length=200, help_text=help_union)