Skip to content

Commit b985485

Browse files
committed
Add regional user permission in dref edit
1 parent 7b11b76 commit b985485

File tree

1 file changed

+55
-6
lines changed

1 file changed

+55
-6
lines changed

dref/views.py

Lines changed: 55 additions & 6 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,
@@ -59,8 +60,24 @@ def get_queryset(self):
5960
)
6061
if user.is_superuser:
6162
return queryset
62-
else:
63-
return Dref.get_for(user)
63+
elif not user.is_superuser:
64+
# get current user dref regions
65+
regions = [0, 1, 2, 3, 4]
66+
dref_list = []
67+
for region in regions:
68+
codename = f"dref_region_admin_{region}"
69+
if Permission.objects.filter(group__user=user, codename=codename).exists():
70+
_queryset = queryset.filter(country__region=region).distinct()
71+
dref_list.append(_queryset)
72+
drefs = []
73+
for dref in dref_list:
74+
id = list(dref.values_list('id', flat=True))
75+
new_dref = Dref.objects.filter(id__in=id).first()
76+
drefs.append(new_dref.id)
77+
if len(drefs):
78+
return queryset.filter(models.Q(id__in=drefs) | models.Q(created_by=user)).distinct()
79+
else:
80+
return Dref.get_for(user)
6481

6582
@action(
6683
detail=True,
@@ -109,8 +126,24 @@ def get_queryset(self):
109126
)
110127
if user.is_superuser:
111128
return queryset
112-
else:
113-
return DrefOperationalUpdate.get_for(user)
129+
elif not user.is_superuser:
130+
# get current user dref regions
131+
regions = [0, 1, 2, 3, 4]
132+
dref_op_list = []
133+
for region in regions:
134+
codename = f"dref_region_admin_{region}"
135+
if Permission.objects.filter(group__user=user, codename=codename).exists():
136+
_queryset = queryset.filter(country__region=region).distinct()
137+
dref_op_list.append(_queryset)
138+
ops = []
139+
for op in dref_op_list:
140+
id = list(op.values_list('id', flat=True))
141+
new_dref_op = DrefOperationalUpdate.objects.filter(id__in=id).first()
142+
ops.append(new_dref_op.id)
143+
if len(ops):
144+
return queryset.filter(models.Q(id__in=ops) | models.Q(created_by=user)).distinct()
145+
else:
146+
return DrefOperationalUpdate.get_for(user)
114147

115148
@action(
116149
detail=True,
@@ -144,8 +177,24 @@ def get_queryset(self):
144177
)
145178
if user.is_superuser:
146179
return queryset
147-
else:
148-
return DrefFinalReport.get_for(user)
180+
elif not user.is_superuser:
181+
# get current user dref regions
182+
regions = [0, 1, 2, 3, 4]
183+
dref_final_list = []
184+
for region in regions:
185+
codename = f"dref_region_admin_{region}"
186+
if Permission.objects.filter(group__user=user, codename=codename).exists():
187+
_queryset = queryset.filter(country__region=region).distinct()
188+
dref_final_list.append(_queryset)
189+
finals = []
190+
for final in dref_final_list:
191+
id = list(final.values_list('id', flat=True))
192+
new_final = DrefFinalReport.objects.filter(id__in=id).first()
193+
finals.append(new_final.id)
194+
if len(finals):
195+
return queryset.filter(models.Q(id__in=finals) | models.Q(created_by=user)).distinct()
196+
else:
197+
return DrefFinalReport.get_for(user)
149198

150199
@action(
151200
detail=True,

0 commit comments

Comments
 (0)