# Share view refactoring

* refactors share views for eiv, oek, ema (kom does not have any)
This commit is contained in:
mpeltriaux 2025-10-21 19:15:17 +02:00
parent 3a9c4e13f6
commit 554ade6794
4 changed files with 35 additions and 83 deletions

View File

@ -5,29 +5,15 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22
"""
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from compensation.models import EcoAccount
from konova.decorators import shared_access_required, default_group_required, login_required_modal
from konova.views.share import AbstractShareByTokenView, AbstractShareFormView
class EcoAccountShareByTokenView(AbstractShareByTokenView):
model = EcoAccount
redirect_url = "compensation:acc:detail"
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = EcoAccount
_REDIRECT_URL = "compensation:acc:detail"
class EcoAccountShareFormView(AbstractShareFormView):
model = EcoAccount
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(default_group_required)
@method_decorator(shared_access_required(EcoAccount, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = EcoAccount
_REDIRECT_URL = "compensation:acc:detail"

View File

@ -5,29 +5,17 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22
"""
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from ema.models import Ema
from konova.decorators import conservation_office_group_required, shared_access_required, login_required_modal
from konova.views.share import AbstractShareByTokenView, AbstractShareFormView
class EmaShareByTokenView(AbstractShareByTokenView):
model = Ema
redirect_url = "ema:detail"
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = Ema
_REDIRECT_URL = "ema:detail"
class EmaShareFormView(AbstractShareFormView):
model = Ema
_MODEL_CLS = Ema
_REDIRECT_URL = "ema:detail"
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(conservation_office_group_required)
@method_decorator(shared_access_required(Ema, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def _user_has_permission(self, user):
return user.is_ets_user()

View File

@ -5,29 +5,15 @@ Contact: ksp-servicestelle@sgdnord.rlp.de
Created on: 19.08.22
"""
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from intervention.models import Intervention
from konova.decorators import default_group_required, shared_access_required, login_required_modal
from konova.views.share import AbstractShareByTokenView, AbstractShareFormView
class InterventionShareByTokenView(AbstractShareByTokenView):
model = Intervention
redirect_url = "intervention:detail"
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = Intervention
_REDIRECT_URL = "intervention:detail"
class InterventionShareFormView(AbstractShareFormView):
model = Intervention
@method_decorator(login_required_modal)
@method_decorator(login_required)
@method_decorator(default_group_required)
@method_decorator(shared_access_required(Intervention, "id"))
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
_MODEL_CLS = Intervention
_REDIRECT_URL = "intervention:detail"

View File

@ -6,24 +6,24 @@ Created on: 22.08.22
"""
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404, redirect
from django.views import View
from django.utils.translation import gettext_lazy as _
from intervention.forms.modals.share import ShareModalForm
from konova.utils.message_templates import DATA_SHARE_SET
from konova.views.base import BaseView, BaseModalFormView
class AbstractShareByTokenView(View):
model = None
redirect_url = None
class AbstractShareByTokenView(LoginRequiredMixin, BaseView):
_MODEL_CLS = None
_REDIRECT_URL = None
class Meta:
abstract = True
def get(self, request, id: str, token: str):
""" Performs sharing of an intervention
""" Performs sharing of an entry
If token given in url is not valid, the user will be redirected to the dashboard
@ -36,7 +36,7 @@ class AbstractShareByTokenView(View):
"""
user = request.user
obj = get_object_or_404(self.model, id=id)
obj = get_object_or_404(self._MODEL_CLS, id=id)
# Check tokens
if obj.access_token == token:
# Send different messages in case user has already been added to list of sharing users
@ -51,7 +51,7 @@ class AbstractShareByTokenView(View):
_("{} has been shared with you").format(obj.identifier)
)
obj.share_with_user(user)
return redirect(self.redirect_url, id=id)
return redirect(self._REDIRECT_URL, id=id)
else:
messages.error(
request,
@ -60,29 +60,21 @@ class AbstractShareByTokenView(View):
)
return redirect("home")
def _user_has_permission(self, user):
return user.is_default_user()
class AbstractShareFormView(View):
model = None
def _user_has_shared_access(self, user, **kwargs):
# The user does not need to have shared access to call the endpoint which gives them shared access
return True
class AbstractShareFormView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = None
_FORM_CLS = ShareModalForm
_MSG_SUCCESS = DATA_SHARE_SET
class Meta:
abstract = True
def get(self, request, id: str):
""" Renders sharing form
Args:
request (HttpRequest): The incoming request
id (str): Object's id
Returns:
"""
obj = get_object_or_404(self.model, id=id)
form = ShareModalForm(request.POST or None, instance=obj, request=request)
return form.process_request(
request,
msg_success=DATA_SHARE_SET
)
def post(self, request, id: str):
return self.get(request, id)
def _user_has_permission(self, user):
return user.is_default_user()