Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/enhancement/gh-3368-user-without…
Browse files Browse the repository at this point in the history
…-role' into test
  • Loading branch information
frjo committed Jul 10, 2023
2 parents 7b29d13 + 5f68f86 commit bf4cd54
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 2 deletions.
12 changes: 12 additions & 0 deletions hypha/apply/funds/models/submissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.apps import apps
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.contrib.contenttypes.fields import GenericRelation
from django.contrib.postgres.indexes import GinIndex
from django.contrib.postgres.search import SearchVector, SearchVectorField
Expand Down Expand Up @@ -44,6 +45,7 @@
from hypha.apply.review.options import AGREE
from hypha.apply.stream_forms.files import StreamFieldDataEncoder
from hypha.apply.stream_forms.models import BaseStreamForm
from hypha.apply.users.groups import APPLICANT_GROUP_NAME

from ..blocks import NAMED_BLOCKS, ApplicationCustomFormFieldsBlock
from ..workflow import (
Expand Down Expand Up @@ -507,6 +509,11 @@ def ensure_user_has_account(self):
if self.user and self.user.is_authenticated:
self.form_data['email'] = self.user.email
self.form_data['full_name'] = self.user.get_full_name()
# Ensure applying user should have applicant role
if not self.user.is_applicant:
applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
self.user.groups.add(applicant_group)
self.user.save()
else:
# Rely on the form having the following must include fields (see blocks.py)
email = self.form_data.get('email')
Expand All @@ -519,6 +526,11 @@ def ensure_user_has_account(self):
email=email,
defaults={'full_name': full_name}
)
# Ensure applying user should have applicant role
if not self.user.is_applicant:
applicant_group = Group.objects.get(name=APPLICANT_GROUP_NAME)
self.user.groups.add(applicant_group)
self.user.save()
else:
self.user, _ = User.objects.get_or_create_and_notify(
email=email,
Expand Down
8 changes: 7 additions & 1 deletion hypha/apply/projects/views/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ class RemoveContractDocumentView(DelegatedViewMixin, FormView):
model = Project

def dispatch(self, request, *args, **kwargs):
if not request.user.is_applicant:
if not request.user.is_applicant or request.user != self.get_object().user:
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)

Expand All @@ -228,6 +228,7 @@ def form_valid(self, form):

@method_decorator(login_required, name='dispatch')
class SelectDocumentView(DelegatedViewMixin, CreateView):
# todo: (no role issue) not getting used anywhere
form_class = SelectDocumentForm
context_name = 'select_document_form'
model = PacketFile
Expand Down Expand Up @@ -472,6 +473,11 @@ class UploadContractDocumentView(DelegatedViewMixin, CreateView):
model = Project
context_name = 'contract_document_form'

def dispatch(self, request, *args, **kwargs):
if request.user != self.get_object().user or not request.user.is_applicant:
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)

def form_valid(self, form):
project = self.kwargs['object']
form.instance.project = project
Expand Down
2 changes: 2 additions & 0 deletions hypha/apply/projects/views/project_partials.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
)

from ..models.project import Project
from ..permissions import has_permission


@login_required
@require_GET
def partial_project_activities(request, pk):
project = get_object_or_404(Project, pk=pk)
has_permission('project_access', request.user, object=project, raise_exception=True)
ctx = {
'actions': get_related_actions_for_user(project, request.user)
}
Expand Down
7 changes: 6 additions & 1 deletion hypha/apply/utils/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,11 @@ def finance_check(self, request):
def contracting_check(self, request):
return request.user.is_contracting

def applicant_check(self, request):
return request.user.is_applicant

def dispatch(self, request, *args, **kwargs):
view = self.applicant_view
view = None

if self.admin_check(request):
view = self.admin_view
Expand All @@ -65,6 +68,8 @@ def dispatch(self, request, *args, **kwargs):
view = self.finance_view
elif self.contracting_check(request):
view = self.contracting_view
elif self.applicant_check(request):
view = self.applicant_view

if view:
return view.as_view()(request, *args, **kwargs)
Expand Down

0 comments on commit bf4cd54

Please sign in to comment.