From 62c3ea5da2419ed165b25808a3c84a2d0484bc9e Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Tue, 21 Jul 2020 23:30:52 +0200 Subject: [PATCH] Add rules&permissions for excuse types --- aleksis/apps/alsijil/menus.py | 7 ++++++- aleksis/apps/alsijil/rules.py | 16 ++++++++++++++++ aleksis/apps/alsijil/tables.py | 6 ++++++ .../templates/alsijil/excuse_type/list.html | 13 ++++++++----- aleksis/apps/alsijil/views.py | 16 ++++++++-------- 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py index 9df6ebb66..f3a79ce8d 100644 --- a/aleksis/apps/alsijil/menus.py +++ b/aleksis/apps/alsijil/menus.py @@ -60,7 +60,12 @@ MENUS = { "name": _("Excuse types"), "url": "excuse_types", "icon": "label", - "validators": ["menu_generator.validators.is_superuser"], + "validators": [ + ( + "aleksis.core.util.predicates.permission_validator", + "alsijil.view_excusetypes", + ), + ], }, ], } diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py index a7cf9c729..da4807449 100644 --- a/aleksis/apps/alsijil/rules.py +++ b/aleksis/apps/alsijil/rules.py @@ -133,3 +133,19 @@ delete_personal_note_filter_predicate = has_person & ( | has_object_perm("alsijil.delete_personalnotefilter") ) add_perm("alsijil.delete_personal_note_filter", delete_personal_note_filter_predicate) + +# View excuse type list +view_excusetypes_predicate = has_person & has_global_perm("alsijil.view_excusetype") +add_perm("alsijil.view_excusetypes", view_excusetypes_predicate) + +# Add excuse type +add_excusetype_predicate = has_person & has_global_perm("alsijil.add_excusetype") +add_perm("alsijil.add_excusetype", add_excusetype_predicate) + +# Edit excuse type +edit_excusetype_predicate = has_person & has_global_perm("alsijil.change_excusetype") +add_perm("alsijil.edit_excusetype", edit_excusetype_predicate) + +# Delete excuse type +delete_excusetype_predicate = has_person & has_global_perm("alsijil.delete_excusetype") +add_perm("alsijil.delete_excusetype", delete_excusetype_predicate) diff --git a/aleksis/apps/alsijil/tables.py b/aleksis/apps/alsijil/tables.py index 3a6762c37..1fa9e337b 100644 --- a/aleksis/apps/alsijil/tables.py +++ b/aleksis/apps/alsijil/tables.py @@ -37,3 +37,9 @@ class ExcuseTypeTable(tables.Table): text=_("Delete"), attrs={"a": {"class": "btn-flat waves-effect waves-red red-text"}}, ) + + def before_render(self, request): + if not request.user.has_perm("alsijil.edit_excusetype"): + self.columns.hide("edit") + if not request.user.has_perm("alsijil.delete_excusetype"): + self.columns.hide("delete") diff --git a/aleksis/apps/alsijil/templates/alsijil/excuse_type/list.html b/aleksis/apps/alsijil/templates/alsijil/excuse_type/list.html index 2be1f28c9..9c74d62e1 100644 --- a/aleksis/apps/alsijil/templates/alsijil/excuse_type/list.html +++ b/aleksis/apps/alsijil/templates/alsijil/excuse_type/list.html @@ -2,7 +2,7 @@ {% extends "core/base.html" %} -{% load i18n %} +{% load i18n rules %} {% load render_table from django_tables2 %} {% block browser_title %}{% blocktrans %}Excuse types{% endblocktrans %}{% endblock %} @@ -11,10 +11,13 @@ {% block content %} {% include "alsijil/excuse_type/warning.html" %} - <a class="btn green waves-effect waves-light" href="{% url 'create_excuse_type' %}"> - <i class="material-icons left">add</i> - {% trans "Create excuse type" %} - </a> + {% has_perm "alsijil.add_excusetype" user as add_excusetype %} + {% if add_excusetype %} + <a class="btn green waves-effect waves-light" href="{% url 'create_excuse_type' %}"> + <i class="material-icons left">add</i> + {% trans "Create excuse type" %} + </a> + {% endif %} {% render_table table %} {% endblock %} diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 288119eb0..5b4475bdf 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -503,42 +503,42 @@ def delete_personal_note_filter(request: HttpRequest, id_: int) -> HttpResponse: return redirect("list_personal_note_filters") -class ExcuseTypeListView(SingleTableView, PermissionRequiredMixin): +class ExcuseTypeListView(PermissionRequiredMixin, SingleTableView): """Table of all excuse types.""" model = ExcuseType table_class = ExcuseTypeTable - permission_required = "core.view_excusetype" + permission_required = "alsijil.view_excusetype" template_name = "alsijil/excuse_type/list.html" -class ExcuseTypeCreateView(AdvancedCreateView, PermissionRequiredMixin): +class ExcuseTypeCreateView(PermissionRequiredMixin, AdvancedCreateView): """Create view for excuse types.""" model = ExcuseType form_class = ExcuseTypeForm - permission_required = "core.create_excusetype" + permission_required = "alsijil.add_excusetype" template_name = "alsijil/excuse_type/create.html" success_url = reverse_lazy("excuse_types") success_message = _("The excuse type has been created.") -class ExcuseTypeEditView(AdvancedEditView, PermissionRequiredMixin): +class ExcuseTypeEditView(PermissionRequiredMixin, AdvancedEditView): """Edit view for excuse types.""" model = ExcuseType form_class = ExcuseTypeForm - permission_required = "core.edit_excusetype" + permission_required = "alsijil.edit_excusetype" template_name = "alsijil/excuse_type/edit.html" success_url = reverse_lazy("excuse_types") success_message = _("The excuse type has been saved.") -class ExcuseTypeDeleteView(AdvancedDeleteView, PermissionRequiredMixin, RevisionMixin): +class ExcuseTypeDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView): """Delete view for excuse types""" model = ExcuseType - permission_required = "core.delete_excusetype" + permission_required = "alsijil.delete_excusetype" template_name = "core/pages/delete.html" success_url = reverse_lazy("excuse_types") success_message = _("The excuse type has been deleted.") -- GitLab