Skip to content

Commit 09100c5

Browse files
authored
Merge pull request #1862 from IFRCGo/feature/dref-regional-admin
Feature/dref regional admin
2 parents 7b11b76 + 8e585d4 commit 09100c5

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

dref/views.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import django.utils.timezone as timezone
66
from reversion.views import RevisionMixin
77
from django.contrib.auth.models import Permission
8+
from django.db import models
89

910
from rest_framework import (
1011
views,
@@ -45,6 +46,25 @@
4546
from dref.permissions import PublishDrefPermission
4647

4748

49+
def filter_dref_queryset_by_user_access(user, queryset):
50+
if user.is_superuser:
51+
return queryset
52+
# Check if regional admin
53+
dref_admin_regions_id = [
54+
codename.replace('dref_region_admin_', '')
55+
for codename in Permission.objects.filter(
56+
group__user=user,
57+
codename__startswith='dref_region_admin_',
58+
).values_list('codename', flat=True)
59+
]
60+
if len(dref_admin_regions_id):
61+
return queryset.filter(
62+
models.Q(created_by=user) | models.Q(country__region__in=dref_admin_regions_id)
63+
).distinct()
64+
# Normal access
65+
return queryset.model.get_for(user)
66+
67+
4868
class DrefViewSet(RevisionMixin, viewsets.ModelViewSet):
4969
serializer_class = DrefSerializer
5070
permission_classes = [permissions.IsAuthenticated]
@@ -57,10 +77,8 @@ def get_queryset(self):
5777
.order_by("-created_at")
5878
.distinct()
5979
)
60-
if user.is_superuser:
61-
return queryset
62-
else:
63-
return Dref.get_for(user)
80+
return filter_dref_queryset_by_user_access(user, queryset)
81+
6482

6583
@action(
6684
detail=True,
@@ -107,10 +125,7 @@ def get_queryset(self):
107125
.order_by("-created_at")
108126
.distinct()
109127
)
110-
if user.is_superuser:
111-
return queryset
112-
else:
113-
return DrefOperationalUpdate.get_for(user)
128+
return filter_dref_queryset_by_user_access(user, queryset)
114129

115130
@action(
116131
detail=True,
@@ -142,10 +157,7 @@ def get_queryset(self):
142157
.order_by("-created_at")
143158
.distinct()
144159
)
145-
if user.is_superuser:
146-
return queryset
147-
else:
148-
return DrefFinalReport.get_for(user)
160+
return filter_dref_queryset_by_user_access(user, queryset)
149161

150162
@action(
151163
detail=True,

0 commit comments

Comments
 (0)