diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-10-16 17:57:13 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-19 14:43:48 +0100 |
commit | c93dd3812c53d21ab8517dc7af72e1d4b70a1b04 (patch) | |
tree | 2153d8fd121f7ecd08a31e4867d58a2eb3c9aab7 /archaeological_files | |
parent | b8eef9b6aaed7ee097f8ea86174067f9ca42abd8 (diff) | |
download | Ishtar-c93dd3812c53d21ab8517dc7af72e1d4b70a1b04.tar.bz2 Ishtar-c93dd3812c53d21ab8517dc7af72e1d4b70a1b04.zip |
♻ permissions refactoring: refactor has_permission methods
Diffstat (limited to 'archaeological_files')
-rw-r--r-- | archaeological_files/admin.py | 6 | ||||
-rw-r--r-- | archaeological_files/ishtar_menu.py | 40 | ||||
-rw-r--r-- | archaeological_files/models.py | 11 | ||||
-rw-r--r-- | archaeological_files/urls.py | 49 | ||||
-rw-r--r-- | archaeological_files/views.py | 20 |
5 files changed, 82 insertions, 44 deletions
diff --git a/archaeological_files/admin.py b/archaeological_files/admin.py index 206e97348..9ed26e68c 100644 --- a/archaeological_files/admin.py +++ b/archaeological_files/admin.py @@ -176,8 +176,10 @@ class CopyPriceAgreementAdmin(GeneralTypeAdmin): def copy_price_agreement(self, request): form = None - if not hasattr(request.user, "ishtaruser") or request.user.ishtaruser.has_right( - "change_priceagreement", session=request.session): + if not request.user.is_superuser and ( + not hasattr(request.user, "ishtaruser") or + not request.user.ishtaruser.has_permission( + "archaeological_files.change_priceagreement")): self.message_user( request, str(_("Cannot change price agreement.")) ) diff --git a/archaeological_files/ishtar_menu.py b/archaeological_files/ishtar_menu.py index bfdd72148..5541fd1d3 100644 --- a/archaeological_files/ishtar_menu.py +++ b/archaeological_files/ishtar_menu.py @@ -25,7 +25,7 @@ from archaeological_operations.models import AdministrativeAct from . import models -# be carreful: each access_controls must be relevant with check_rights in urls +# be carreful: each access_controls must be relevant with check_permissions in urls MENU_SECTIONS = [ ( @@ -40,31 +40,43 @@ MENU_SECTIONS = [ "file_search", _("Search"), model=models.File, - access_controls=["view_file", "view_own_file"], + access_controls=[ + "archaeological_files.view_file", + "archaeological_files.view_own_file" + ], ), MenuItem( "file_creation", _("Creation"), model=models.File, - access_controls=["add_file", "add_own_file"], + access_controls=[ + "archaeological_files.add_file", + "archaeological_files.add_own_file" + ], ), MenuItem( "file_modification", _("Modification"), model=models.File, - access_controls=["change_file", "change_own_file"], + access_controls=[ + "archaeological_files.change_file", + "archaeological_files.change_own_file" + ], ), MenuItem( "file_closing", _("Closing"), model=models.File, - access_controls=["close_file"], + access_controls=["archaeological_files.close_file"], ), MenuItem( "file_deletion", _("Deletion"), model=models.File, - access_controls=["delete_file", "delete_own_file"], + access_controls=[ + "archaeological_files.delete_file", + "archaeological_files.delete_own_file" + ], ), SectionItem( "admin_act_files", @@ -74,25 +86,33 @@ MENU_SECTIONS = [ "file_administrativeactfile_search", _("Search"), model=AdministrativeAct, - access_controls=["change_administrativeact"], + access_controls=[ + "archaeological_operations.change_administrativeact" + ], ), MenuItem( "file_administrativeactfile", _("Creation"), model=AdministrativeAct, - access_controls=["change_administrativeact"], + access_controls=[ + "archaeological_operations.change_administrativeact" + ], ), MenuItem( "file_administrativeactfile_modification", _("Modification"), model=AdministrativeAct, - access_controls=["change_administrativeact"], + access_controls=[ + "archaeological_operations.change_administrativeact" + ], ), MenuItem( "file_administrativeactfile_deletion", _("Deletion"), model=AdministrativeAct, - access_controls=["change_administrativeact"], + access_controls=[ + "archaeological_operations.change_administrativeact" + ], ), ], ), diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 222c7b700..1f164c30d 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -27,12 +27,13 @@ from django.contrib.gis.db import models from django.contrib.postgres.indexes import GinIndex from django.core.cache import cache from django.core.validators import MinValueValidator, MaxValueValidator -from django.db.models import Q, Count, Sum, Max +from django.db.models import Max from django.db.models.signals import post_save, m2m_changed, post_delete from django.urls import reverse from ishtar_common.models_common import OrderedHierarchicalType -from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy, get_current_profile, InlineClass +from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy, get_current_profile, \ + InlineClass from ishtar_common.utils import ( cached_label_changed, @@ -1548,7 +1549,7 @@ class File( def get_extra_actions(self, request): # url, base_text, icon, extra_text, extra css class, is a quick action actions = super(File, self).get_extra_actions(request) - if self.can_do(request, "change_operation"): + if self.can_do(request, "archaeological_files.change_file"): actions += [ ( reverse("file-parcels-modify", args=[self.pk]), @@ -1571,7 +1572,7 @@ class File( False, ), ] - if self.can_do(request, "add_administrativeact"): + if self.can_do(request, "archaeological_operations.add_administrativeact"): actions += [ ( reverse("file-add-adminact", args=[self.pk]), @@ -1582,7 +1583,7 @@ class File( False, ), ] - if self.can_do(request, "add_operation"): + if self.can_do(request, "archaeological_operations.add_operation"): actions += [ ( reverse("file-add-operation", args=[self.pk]), diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py index 0be30874b..4b50047a6 100644 --- a/archaeological_files/urls.py +++ b/archaeological_files/urls.py @@ -20,24 +20,24 @@ from django.conf.urls import url from django.urls import path -from ishtar_common.utils import check_rights +from ishtar_common.utils import check_permissions from archaeological_files import views, views_api from archaeological_operations.views import administrativeactfile_document -# be carreful: each check_rights must be relevant with ishtar_menu +# be carreful: each check_permissions must be relevant with ishtar_menu # forms: urlpatterns = [ url( r"file_administrativeactfile_search/(?P<step>.+)?$", - check_rights(["change_administrativeact"])( + check_permissions(["archaeological_operations.change_administrativeact"])( views.file_administrativeactfile_search_wizard ), name="file_administrativeactfile_search", ), url( r"^file_administrativeactfile/(?P<step>.+)?$", - check_rights(["change_administrativeact"])( + check_permissions(["archaeological_operations.change_administrativeact"])( views.file_administrativeactfile_wizard ), name="file_administrativeactfile", @@ -49,14 +49,14 @@ urlpatterns = [ ), url( r"file_administrativeactfile_deletion/(?P<step>.+)?$", - check_rights(["change_administrativeact"])( + check_permissions(["archaeological_operations.change_administrativeact"])( views.file_administrativeactfile_deletion_wizard ), name="file_administrativeactfile_deletion", ), url( r"file_administrativeactfile_modification/(?P<step>.+)?$", - check_rights(["change_administrativeact"])( + check_permissions(["archaeological_operations.change_administrativeact"])( views.file_administrativeactfile_modification_wizard ), name="file_administrativeactfile_modification", @@ -68,17 +68,20 @@ urlpatterns = [ ), url( r"file_search/(?P<step>.+)?$", - check_rights(["view_file", "view_own_file"])(views.file_search_wizard), + check_permissions([ + "archaeological_files.view_file", + "archaeological_files.view_own_file"])(views.file_search_wizard), name="file_search", ), url( r"^file_creation/(?P<step>.+)?$", - check_rights(["add_file"])(views.file_creation_wizard), + check_permissions(["archaeological_files.add_file"])(views.file_creation_wizard), name="file_creation", ), url( r"^file_modification/(?P<step>.+)?$", - check_rights(["change_file", "change_own_file"])( + check_permissions(["archaeological_files.change_file", + "archaeological_files.change_own_file"])( views.file_modification_wizard ), name="file_modification", @@ -86,12 +89,16 @@ urlpatterns = [ url(r"^file_modify/(?P<pk>.+)/$", views.file_modify, name="file_modify"), url( r"^file_closing/(?P<step>.+)?$", - check_rights(["change_file"])(views.file_closing_wizard), + check_permissions( + ["archaeological_files.change_file"] + )(views.file_closing_wizard), name="file_closing", ), url( r"file_deletion/(?P<step>.+)?$", - check_rights(["delete_file", "delete_own_file"])(views.file_deletion_wizard), + check_permissions( + ["archaeological_files.delete_file", "archaeological_files.delete_own_file"] + )(views.file_deletion_wizard), name="file_deletion", ), url(r"^file_delete/(?P<pk>.+)/$", views.file_delete, name="delete-file"), @@ -123,7 +130,9 @@ urlpatterns = [ url(r"revert-file/(?P<pk>.+)/(?P<date>.+)$", views.revert_file, name="revert-file"), url( r"^file-add-adminact/(?P<pk>[0-9-]+)/$", - check_rights(["add_administrativeact"])(views.file_adminact_add), + check_permissions(["archaeological_operations.add_administrativeact"])( + views.file_adminact_add + ), name="file-add-adminact", ), url( @@ -134,12 +143,15 @@ urlpatterns = [ ), url( r"^file-add-operation/(?P<pk>[0-9-]+)/$", - check_rights(["add_operation"])(views.file_add_operation), + check_permissions(["archaeological_operations.add_operation"])( + views.file_add_operation + ), name="file-add-operation", ), url( r'^file/edit-preventive-price/(?P<pk>\d+)/$', - check_rights(["change_file", "change_own_file"])( + check_permissions(["archaeological_files.change_file", + "archaeological_files.change_own_file"])( views.PreventiveSimpleEditView.as_view() ), name="file-edit-preventive-price", @@ -151,21 +163,24 @@ urlpatterns = [ ), url( r'^file/edit-preventive/(?P<pk>\d+)/$', - check_rights(["change_file", "change_own_file"])( + check_permissions(["archaeological_files.change_file", + "archaeological_files.change_own_file"])( views.PreventiveEditView.as_view() ), name="file-edit-preventive", ), url( r'^file/edit-preventive/add-default-cost/(?P<pk>\d+)/$', - check_rights(["change_file", "change_own_file"])( + check_permissions(["archaeological_files.change_file", + "archaeological_files.change_own_file"])( views.file_edit_preventive_add_default ), name="file-edit-preventive-default-cost", ), url( r'^file/edit-preventive/copy-planned/(?P<pk>\d+)/$', - check_rights(["change_file", "change_own_file"])( + check_permissions(["archaeological_files.change_file", + "archaeological_files.change_own_file"])( views.file_edit_preventive_copy_planned ), name="file-edit-preventive-copy-planned", diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 44ba75947..0d3f978b5 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -24,7 +24,7 @@ from django.db.models import Q, F from django.http import HttpResponse, Http404, HttpResponseRedirect from django.forms.formsets import formset_factory from django.views.generic.edit import UpdateView -from django.shortcuts import redirect, render +from django.shortcuts import redirect from django.urls import reverse from ishtar_common.utils import ugettext_lazy as _ @@ -56,18 +56,18 @@ from archaeological_operations.forms import FinalAdministrativeActDeleteForm from ishtar_common.forms import ClosingDateFormSelection from . import forms, models -from archaeological_operations.models import Operation, AdministrativeAct +from archaeological_operations.models import AdministrativeAct RE_YEAR_INDEX = re.compile(r"([1-2][0-9]{3})-([0-9]+)") # eg.: 2014-123 def autocomplete_file(request): + ishtaruser = getattr(request.user, "ishtaruser", None) + if not ishtaruser: + return HttpResponse(content_type="text/plain") if ( - not request.user.has_perm("ishtar_common.view_file", models.File) - and not request.user.has_perm("ishtar_common.view_own_file", models.File) - and not request.user.ishtaruser.has_right( - "file_search", session=request.session - ) + not ishtaruser.has_permission("archaeological_files.view_file") + and not ishtaruser.has_permission("archaeological_files.view_own_file") ): return HttpResponse(content_type="text/plain") if not request.GET.get("term"): @@ -103,9 +103,9 @@ revert_file = revert_item(models.File) def extra_file_dct(request, item): dct = {} - if request.user.has_perm( - "ishtar_common.add_operation", Operation - ) or request.user.ishtaruser.has_right("add_operation"): + if request.user.ishtaruser.has_permission( + "archaeological_operations.add_operation" + ): dct["can_add_operation"] = True return dct |