Skip to content

Commit 78f2a20

Browse files
committed
Add country and regional permission in per document uploa
1 parent 4f8561d commit 78f2a20

File tree

3 files changed

+43
-13
lines changed

3 files changed

+43
-13
lines changed

api/management/commands/ingest_ns_capacity.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def handle(self, *args, **kwargs):
2222
logger.info('Starting NS Contacts')
2323

2424
# OCAC Assessment
25-
OCAC_DATA_API = f"https://data-api.ifrc.org/api/ocacpublic?apiKey={settings.FDRS_API_KEY}"
25+
OCAC_DATA_API = f"https://data-api.ifrc.org/api/ocacpublic?apiKey={settings.FDRS_APIKEY}"
2626
resp_ocac = requests.get(OCAC_DATA_API)
2727
if resp_ocac.status_code != 200:
2828
text_to_log = "Error querying OCAC at " + url
@@ -62,7 +62,7 @@ def handle(self, *args, **kwargs):
6262
CronJob.sync_cron(body)
6363

6464
# BOCA Assessment
65-
BOCA_DATA_API = f"https://data-api.ifrc.org/api/bocapublic?apiKey={settings.FDRS_API_KEY}"
65+
BOCA_DATA_API = f"https://data-api.ifrc.org/api/bocapublic?apiKey={settings.FDRS_APIKEY}"
6666
resp_boca = requests.get(BOCA_DATA_API)
6767
resp_boca_data = resp_boca.json()
6868
for item in resp_boca_data:

per/drf_views.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from django.shortcuts import get_object_or_404
2020
from django.db import transaction
2121
from drf_spectacular.utils import extend_schema, extend_schema_view
22+
from django.contrib.auth.models import Permission
23+
2224

2325
from main.utils import SpreadSheetContentNegotiation
2426
from .admin_classes import RegionRestrictedAdmin
@@ -723,8 +725,35 @@ class PerDocumentUploadViewSet(viewsets.ModelViewSet):
723725
serializer_class = PerDocumentUploadSerializer
724726
filterset_class = PerDocumentFilter
725727
permission_classes = [permissions.IsAuthenticated, PerDocumentUploadPermission]
726-
get_request_user_regions = RegionRestrictedAdmin.get_request_user_regions
727-
get_filtered_queryset = RegionRestrictedAdmin.get_filtered_queryset
728+
729+
def filter_per_queryset_by_user_access(self, user, queryset):
730+
if user.is_superuser or user.has_perm("api.per_core_admin"):
731+
return queryset
732+
# Check if country admin
733+
per_admin_country_id = [
734+
codename.replace('per_country_admin_', '')
735+
for codename in Permission.objects.filter(
736+
group__user=user,
737+
codename__startswith='per_country_admin_',
738+
).values_list('codename', flat=True)
739+
]
740+
per_admin_region_id = [
741+
codename.replace('per_region_admin_', '')
742+
for codename in Permission.objects.filter(
743+
group__user=user,
744+
codename__startswith='per_region_admin_',
745+
).values_list('codename', flat=True)
746+
]
747+
if len(per_admin_country_id) or len(per_admin_region_id):
748+
return queryset.filter(
749+
Q(created_by=user)|
750+
Q(country__in=per_admin_country_id) |
751+
Q(country__region__in=per_admin_region_id)
752+
).distinct()
753+
# Normal access
754+
return queryset.filter(created_by=user)
728755

729756
def get_queryset(self):
730-
return super().get_queryset().filter(created_by=self.request.user)
757+
queryset = super().get_queryset()
758+
user = self.request.user
759+
return self.filter_per_queryset_by_user_access(user, queryset)

per/migrations/0090_auto_20231030_1505.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@
33
from django.db import migrations
44
from django.core.management import call_command
55

6+
def update_question_answer(apps, schema_editor):
7+
FormQuestion = apps.get_model("per", "FormQuestion")
8+
FormAnswer = apps.get_model("per", "FormAnswer")
9+
form_questions = FormQuestion.objects.all()
10+
for form_question in form_questions:
11+
form_question.answers.add(FormAnswer.objects.get(id=5)) # Hardcoded for now
612

713
class Migration(migrations.Migration):
814

9-
def forwards_func(apps, schema_editor):
10-
print('forwards')
11-
call_command('add_partially_answers')
12-
13-
def reverse_func(apps, schema_editor):
14-
print('reverse')
15-
1615
dependencies = [
1716
('per', '0089_alter_overview_type_of_previous_assessment'),
1817
]
1918

2019
operations = [
21-
migrations.RunPython(forwards_func, reverse_func, elidable=False)
20+
migrations.RunPython(
21+
update_question_answer, reverse_code=migrations.RunPython.noop
22+
)
2223
]

0 commit comments

Comments
 (0)