Skip to content

Commit a738a38

Browse files
Merge pull request #97 from unicef/bugfix/248879-user_role-permission
AB#248879: UserRole permission
2 parents a9f3d6c + 8c9a49b commit a738a38

File tree

1 file changed

+10
-2
lines changed
  • src/country_workspace/workspaces

1 file changed

+10
-2
lines changed

src/country_workspace/workspaces/forms.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from typing import TYPE_CHECKING, Any
22

3+
from dateutil.utils import today
34
from django import forms
45
from django.contrib.admin.forms import AdminAuthenticationForm
56
from django.core.exceptions import ValidationError
6-
from django.db.models import QuerySet
7+
from django.db.models import QuerySet, Q
78
from django.http import HttpRequest
89
from django.utils.translation import gettext_lazy as _
910
from django_select2 import forms as s2forms
@@ -85,4 +86,11 @@ def __init__(self, *args: "Any", **kwargs: "Any") -> None:
8586
self.request = kwargs.pop("request")
8687
super().__init__(*args, **kwargs)
8788
if state.tenant:
88-
self.fields["program"].queryset = state.tenant.programs.filter(enabled=True).order_by("name").all()
89+
program_qs = state.tenant.programs.filter(enabled=True)
90+
if not state.request.user.is_superuser:
91+
roles = state.request.user.roles.filter(Q(expires=None) | Q(expires__gt=today()))
92+
has_all_programs_access = roles.filter(program=None).exists()
93+
if not has_all_programs_access:
94+
program_qs = program_qs.filter(id__in=roles.values("program_id"))
95+
96+
self.fields["program"].queryset = program_qs.order_by("name").all()

0 commit comments

Comments
 (0)