Skip to content
Snippets Groups Projects
Verified Commit 8c34f54c authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Add permissions

parent 6ac6446b
No related branches found
No related tags found
No related merge requests found
Pipeline #83558 failed
Showing
with 240 additions and 108 deletions
...@@ -146,7 +146,9 @@ class CardPrinter(ExtensibleModel): ...@@ -146,7 +146,9 @@ class CardPrinter(ExtensibleModel):
self.save() self.save()
@classmethod @classmethod
def check_online_status_for_all(cls): def check_online_status_for_all(cls, qs=None):
if not qs:
qs = cls.objects.all()
for printer in cls.objects.all(): for printer in cls.objects.all():
printer.check_online_status() printer.check_online_status()
......
# TBD from rules import add_rule
from aleksis.core.util.predicates import (
has_any_object,
has_global_perm,
has_object_perm,
has_person,
)
from .models import Card, CardLayout, CardPrinter
view_card_printers_predicate = has_person & (
has_global_perm("kort.view_cardprinter") | has_any_object("kort.view_cardprinter", CardPrinter)
)
add_rule("kort.view_cardprinters_rule", view_card_printers_predicate)
view_card_printer_predicate = has_person & (
has_global_perm("kort.view_cardprinter") | has_object_perm("kort.view_cardprinter")
)
add_rule("kort.view_cardprinter_rule", view_card_printer_predicate)
create_card_printer_predicate = view_card_printers_predicate & has_global_perm(
"kort.add_cardprinter"
)
add_rule("kort.create_cardprinter_rule", create_card_printer_predicate)
edit_card_printer_predicate = view_card_printer_predicate & (
has_global_perm("kort.change_cardprinter") | has_object_perm("kort.change_cardprinter")
)
add_rule("kort.edit_cardprinter_rule", edit_card_printer_predicate)
delete_card_printer_predicate = view_card_printer_predicate & (
has_global_perm("kort.delete_cardprinter") | has_object_perm("kort.delete_cardprinter")
)
add_rule("kort.delete_cardprinter_rule", delete_card_printer_predicate)
view_card_layouts_predicate = has_person & (
has_global_perm("kort.view_cardlayout") | has_any_object("kort.view_cardlayout", CardLayout)
)
add_rule("kort.view_cardlayouts_rule", view_card_layouts_predicate)
view_card_layout_predicate = has_person & (
has_global_perm("kort.view_cardlayout") | has_object_perm("kort.view_cardlayout")
)
add_rule("kort.view_cardlayout_rule", view_card_layout_predicate)
create_card_layout_predicate = view_card_layouts_predicate & has_global_perm("kort.add_cardlayout")
add_rule("kort.create_cardlayout_rule", create_card_layout_predicate)
edit_card_layout_predicate = view_card_layout_predicate & (
has_global_perm("kort.change_cardlayout") | has_object_perm("kort.change_cardlayout")
)
add_rule("kort.edit_cardlayout_rule", edit_card_layout_predicate)
delete_card_layout_predicate = view_card_layout_predicate & (
has_global_perm("kort.delete_cardlayout") | has_object_perm("kort.delete_cardlayout")
)
add_rule("kort.delete_cardlayout_rule", delete_card_layout_predicate)
view_cards_predicate = has_person & (
has_global_perm("kort.view_card") | has_any_object("kort.view_card", Card)
)
add_rule("kort.view_cards_rule", view_cards_predicate)
view_card_predicate = has_person & (
has_global_perm("kort.view_card") | has_object_perm("kort.view_card")
)
add_rule("kort.view_card_rule", view_card_predicate)
create_card_predicate = view_cards_predicate & has_global_perm("kort.add_card")
add_rule("kort.create_card_rule", create_card_predicate)
edit_card_predicate = view_card_predicate & (
has_global_perm("kort.change_card") | has_object_perm("kort.change_card")
)
add_rule("kort.edit_card_rule", edit_card_predicate)
delete_card_predicate = view_card_predicate & (
has_global_perm("kort.delete_card") | has_object_perm("kort.delete_card")
)
add_rule("kort.delete_card_rule", delete_card_predicate)
print_card_predicate = edit_card_predicate
add_rule("kort.print_card_rule", print_card_predicate)
deactivate_card_predicate = edit_card_predicate
add_rule("kort.deactivate_card_rule", deactivate_card_predicate)
{% load i18n %} {% load i18n rules %}
{% has_perm 'kort.print_card_rule' user card as can_print %}
{% has_perm 'kort.deactivate_card_rule' user card as can_deactivate %}
{% has_perm 'kort.delete_card_rule' user card as can_delete %}
<div id="detail-modal-{{ card.pk }}" class="modal"> <div id="detail-modal-{{ card.pk }}" class="modal">
<div class="modal-content"> <div class="modal-content">
...@@ -16,7 +19,7 @@ ...@@ -16,7 +19,7 @@
<i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i> <i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i>
{% trans "Show" %} {% trans "Show" %}
</a> </a>
{% if not card.deactivated %} {% if not card.deactivated and can_deactivate %}
<div id="deactivate-modal-{{ card.pk }}" class="modal"> <div id="deactivate-modal-{{ card.pk }}" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>{% trans "Do you really want to deactivate the following card?" %}</h4> <h4>{% trans "Do you really want to deactivate the following card?" %}</h4>
...@@ -38,7 +41,9 @@ ...@@ -38,7 +41,9 @@
{% trans "Deactivate" %} {% trans "Deactivate" %}
</a> </a>
{% endif %} {% endif %}
{% if can_delete %}
<a class="btn-flat waves-effect waves-red red-text modal-trigger" href="{% url "delete_card" card.pk %}"> <a class="btn-flat waves-effect waves-red red-text modal-trigger" href="{% url "delete_card" card.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i> <i class="material-icons left iconify" data-icon="mdi:delete-outline"></i>
{% trans "Delete" %} {% trans "Delete" %}
</a> </a>
\ No newline at end of file {% endif %}
{% load i18n %} {% load i18n rules %}
<div class="row"> <div class="row">
<div class="col s12 m12 l6"> <div class="col s12 m12 l6">
<div class="card"> <div class="card">
...@@ -53,12 +53,15 @@ ...@@ -53,12 +53,15 @@
{% trans "Show card as PDF" %} {% trans "Show card as PDF" %}
</a> </a>
{% else %} {% else %}
<div class="row center-via-flex"> {% has_perm 'kort.edit_card_rule' user card as can_edit %}
<a class="btn waves-effect waves-light" href="{% url "generate_card_pdf" card.pk %}"> {% if can_edit %}
<i class="material-icons left iconify" data-icon="mdi:file-pdf-box"></i> <div class="row center-via-flex">
{% trans "Generate card as PDF" %} <a class="btn waves-effect waves-light" href="{% url "generate_card_pdf" card.pk %}">
</a> <i class="material-icons left iconify" data-icon="mdi:file-pdf-box"></i>
</div> {% trans "Generate card as PDF" %}
</a>
</div>
{% endif %}
{% endif %} {% endif %}
</div> </div>
</div> </div>
\ No newline at end of file
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
{% block page_title %}{% blocktrans %}Cards{% endblocktrans %}{% endblock %} {% block page_title %}{% blocktrans %}Cards{% endblocktrans %}{% endblock %}
{% block content %} {% block content %}
{% has_perm 'core.create_card_rule' user person as can_create_person %} {% has_perm 'kort.create_card_rule' user as can_create %}
{% if can_create_person %} {% if can_create %}
<a class="btn green waves-effect waves-light" href="{% url 'create_card' %}"> <a class="btn green waves-effect waves-light" href="{% url 'create_card' %}">
<i class="material-icons left iconify" data-icon="mdi:plus"></i> <i class="material-icons left iconify" data-icon="mdi:plus"></i>
{% trans "Issue new card(s)" %} {% trans "Issue new card(s)" %}
......
{% load material_form i18n %} {% load material_form i18n rules %}
<form action="{% url "print_card" card.pk %}" method="get"> {% has_perm 'kort.print_card_rule' user card as can_print %}
<div class="card"> {% if can_print %}
<div class="card-content"> <form action="{% url "print_card" card.pk %}" method="get">
<div class="card-title"><i class="material-icons left iconify" <div class="card">
data-icon="mdi:printer-outline"></i> {% trans "Print card" %}</div> <div class="card-content">
<div class="card-title"><i class="material-icons left iconify"
data-icon="mdi:printer-outline"></i> {% trans "Print card" %}</div>
{% csrf_token %} {% csrf_token %}
{% form form=printer_form %}{% endform %} {% form form=printer_form %}{% endform %}
</div>
<div class="card-action-light">
<button type="submit" class="btn waves-effect waves-light">
<i class="material-icons left iconify" data-icon="mdi:printer-outline"></i>
{% trans "Print card" %}
</button>
</div>
</div> </div>
<div class="card-action-light"> </form>
<button type="submit" class="btn waves-effect waves-light"> {% endif %}
<i class="material-icons left iconify" data-icon="mdi:printer-outline"></i> \ No newline at end of file
{% trans "Print card" %}
</button>
</div>
</div>
</form>
{% load i18n %} {% load i18n rules %}
<div id="detail-modal-{{ card_layout.pk }}" class="modal"> <div id="detail-modal-{{ card_layout.pk }}" class="modal">
<div class="modal-content"> <div class="modal-content">
...@@ -16,11 +16,20 @@ ...@@ -16,11 +16,20 @@
<i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i> <i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i>
{% trans "Show" %} {% trans "Show" %}
</a> </a>
<a class="btn-flat waves-effect waves-orange orange-text modal-trigger" href="{% url "edit_card_layout" card_layout.pk %}"> {% has_perm 'kort.edit_cardlayout_rule' user card_layout as can_edit %}
<i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i> {% has_perm 'kort.delete_cardlayout_rule' user card_layout as can_delete %}
{% trans "Edit" %}
</a> {% if can_edit %}
<a class="btn-flat waves-effect waves-red red-text modal-trigger" href="{% url "delete_card_layout" card_layout.pk %}"> <a class="btn-flat waves-effect waves-orange orange-text modal-trigger"
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i> href="{% url "edit_card_layout" card_layout.pk %}">
{% trans "Delete" %} <i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
</a> {% trans "Edit" %}
\ No newline at end of file </a>
{% endif %}
{% if can_delete %}
<a class="btn-flat waves-effect waves-red red-text modal-trigger"
href="{% url "delete_card_layout" card_layout.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i>
{% trans "Delete" %}
</a>
{% endif %}
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
{% extends "core/base.html" %} {% extends "core/base.html" %}
{% load material_form i18n any_js %} {% load material_form i18n any_js rules %}
{% block browser_title %}{% blocktrans %}Card Layout{% endblocktrans %}{% endblock %} {% block browser_title %}{% blocktrans %}Card Layout{% endblocktrans %}{% endblock %}
...@@ -14,14 +14,22 @@ ...@@ -14,14 +14,22 @@
<i class="material-icons left iconify" data-icon="mdi:arrow-left"></i> <i class="material-icons left iconify" data-icon="mdi:arrow-left"></i>
{% trans "Back to all layouts" %} {% trans "Back to all layouts" %}
</a> </a>
<a class="btn waves-effect waves-light margin-bottom orange modal-trigger" {% has_perm 'kort.edit_cardlayout_rule' user object as can_edit %}
href="{% url "edit_card_layout" object.pk %}"> {% has_perm 'kort.delete_cardlayout_rule' user object as can_delete %}
<i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
{% trans "Edit" %} {% if can_edit %}
</a> <a class="btn waves-effect waves-light margin-bottom orange modal-trigger"
<a class="btn waves-effect waves-light margin-bottom red modal-trigger" href="{% url "delete_card_layout" object.pk %}"> href="{% url "edit_card_layout" object.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i> <i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
{% trans "Delete" %} {% trans "Edit" %}
</a> </a>
{% endif %}
{% if can_delete %}
<a class="btn waves-effect waves-light margin-bottom red modal-trigger"
href="{% url "delete_card_layout" object.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i>
{% trans "Delete" %}
</a>
{% endif %}
{% include "kort/card_layout/detail_content.html" with card_layout=object %} {% include "kort/card_layout/detail_content.html" with card_layout=object %}
{% endblock %} {% endblock %}
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
{% block page_title %}{% blocktrans %}Card layouts{% endblocktrans %}{% endblock %} {% block page_title %}{% blocktrans %}Card layouts{% endblocktrans %}{% endblock %}
{% block content %} {% block content %}
{% has_perm 'core.create_cardlayout_rule' user person as can_create %} {% has_perm 'kort.create_cardlayout_rule' user as can_create %}
{% if can_create %} {% if can_create %}
<a class="btn green waves-effect waves-light" href="{% url 'create_card_layout' %}"> <a class="btn green waves-effect waves-light" href="{% url 'create_card_layout' %}">
......
{% load i18n %} {% load i18n rules %}
<div id="detail-modal-{{ printer.pk }}" class="modal"> <div id="detail-modal-{{ printer.pk }}" class="modal">
<div class="modal-content"> <div class="modal-content">
...@@ -16,11 +16,20 @@ ...@@ -16,11 +16,20 @@
<i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i> <i class="material-icons left iconify" data-icon="mdi:play-box-outline"></i>
{% trans "Show" %} {% trans "Show" %}
</a> </a>
<a class="btn-flat waves-effect waves-orange orange-text modal-trigger" href="{% url "edit_card_printer" printer.pk %}">
<i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i> {% has_perm 'kort.edit_cardprinter_rule' user printer as can_edit %}
{% trans "Edit" %} {% has_perm 'kort.delete_cardprinter_rule' user printer as can_delete %}
</a>
<a class="btn-flat waves-effect waves-red red-text modal-trigger" href="{% url "delete_card_printer" printer.pk %}"> {% if can_edit %}
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i> <a class="btn-flat waves-effect waves-orange orange-text modal-trigger"
{% trans "Delete" %} href="{% url "edit_card_printer" printer.pk %}">
</a> <i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
\ No newline at end of file {% trans "Edit" %}
</a>
{% endif %}
{% if can_delete %}
<a class="btn-flat waves-effect waves-red red-text modal-trigger" href="{% url "delete_card_printer" printer.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i>
{% trans "Delete" %}
</a>
{% endif %}
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
{% extends "core/base.html" %} {% extends "core/base.html" %}
{% load material_form i18n any_js %} {% load material_form i18n any_js rules %}
{% block browser_title %}{% blocktrans %}Card Printer{% endblocktrans %}{% endblock %} {% block browser_title %}{% blocktrans %}Card Printer{% endblocktrans %}{% endblock %}
...@@ -14,14 +14,22 @@ ...@@ -14,14 +14,22 @@
<i class="material-icons left iconify" data-icon="mdi:arrow-left"></i> <i class="material-icons left iconify" data-icon="mdi:arrow-left"></i>
{% trans "Back to all printers" %} {% trans "Back to all printers" %}
</a> </a>
<a class="btn waves-effect waves-light margin-bottom orange modal-trigger" {% has_perm 'kort.edit_cardprinter_rule' user printer as can_edit %}
href="{% url "edit_card_printer" object.pk %}"> {% has_perm 'kort.delete_cardprinter_rule' user printer as can_delete %}
<i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
{% trans "Edit" %} {% if can_edit %}
</a> <a class="btn waves-effect waves-light margin-bottom orange modal-trigger"
<a class="btn waves-effect waves-light margin-bottom red modal-trigger" href="{% url "delete_card_printer" object.pk %}"> href="{% url "edit_card_printer" object.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i> <i class="material-icons left iconify" data-icon="mdi:pencil-outline"></i>
{% trans "Delete" %} {% trans "Edit" %}
</a> </a>
{% endif %}
{% if can_delete %}
<a class="btn waves-effect waves-light margin-bottom red modal-trigger"
href="{% url "delete_card_printer" object.pk %}">
<i class="material-icons left iconify" data-icon="mdi:delete-outline"></i>
{% trans "Delete" %}
</a>
{% endif %}
{% include "kort/printer/detail_content.html" with printer=object %} {% include "kort/printer/detail_content.html" with printer=object %}
{% endblock %} {% endblock %}
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
{% block page_title %}{% blocktrans %}Card printers{% endblocktrans %}{% endblock %} {% block page_title %}{% blocktrans %}Card printers{% endblocktrans %}{% endblock %}
{% block content %} {% block content %}
{% has_perm 'core.create_cardprinter_rule' user person as can_create_person %} {% has_perm 'kort.create_cardprinter_rule' user as can_create %}
{% if can_create_person %} {% if can_create %}
<a class="btn green waves-effect waves-light" href="{% url 'create_card_printer' %}"> <a class="btn green waves-effect waves-light" href="{% url 'create_card_printer' %}">
<i class="material-icons left iconify" data-icon="mdi:plus"></i> <i class="material-icons left iconify" data-icon="mdi:plus"></i>
{% trans "Register new card printer" %} {% trans "Register new card printer" %}
......
...@@ -3,7 +3,6 @@ from django.urls import path ...@@ -3,7 +3,6 @@ from django.urls import path
from . import api, views from . import api, views
urlpatterns = [ urlpatterns = [
path("test", views.TestPDFView.as_view(), name="test_pdf"),
path("cards/", views.CardListView.as_view(), name="cards"), path("cards/", views.CardListView.as_view(), name="cards"),
path("cards/create/", views.CardIssueView.as_view(), name="create_card"), path("cards/create/", views.CardIssueView.as_view(), name="create_card"),
path("cards/<int:pk>/", views.CardDetailView.as_view(), name="card"), path("cards/<int:pk>/", views.CardDetailView.as_view(), name="card"),
......
...@@ -4,7 +4,7 @@ from django.contrib import messages ...@@ -4,7 +4,7 @@ from django.contrib import messages
from django.db.models import Count, Q, QuerySet from django.db.models import Count, Q, QuerySet
from django.forms import Form from django.forms import Form
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from django.views import View from django.views import View
...@@ -12,6 +12,7 @@ from django.views.generic.detail import DetailView, SingleObjectMixin ...@@ -12,6 +12,7 @@ from django.views.generic.detail import DetailView, SingleObjectMixin
from django_tables2 import RequestConfig, SingleTableView, table_factory from django_tables2 import RequestConfig, SingleTableView, table_factory
from formtools.wizard.views import CookieWizardView from formtools.wizard.views import CookieWizardView
from guardian.shortcuts import get_objects_for_user
from reversion.views import RevisionMixin from reversion.views import RevisionMixin
from rules.contrib.views import PermissionRequiredMixin from rules.contrib.views import PermissionRequiredMixin
...@@ -33,20 +34,6 @@ from aleksis.apps.kort.tables import ( ...@@ -33,20 +34,6 @@ from aleksis.apps.kort.tables import (
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.models import Person from aleksis.core.models import Person
from aleksis.core.util.celery_progress import render_progress_page from aleksis.core.util.celery_progress import render_progress_page
from aleksis.core.views import RenderPDFView
class TestPDFView(RenderPDFView):
template_name = "kort/pdf.html"
def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
context = self.get_context_data(**kwargs)
return render(request, self.template_name, context)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Test PDF"
return context
class PrinterSelectMixin: class PrinterSelectMixin:
...@@ -60,19 +47,22 @@ class PrinterSelectMixin: ...@@ -60,19 +47,22 @@ class PrinterSelectMixin:
class CardListView(PermissionRequiredMixin, RevisionMixin, PrinterSelectMixin, SingleTableView): class CardListView(PermissionRequiredMixin, RevisionMixin, PrinterSelectMixin, SingleTableView):
"""List view for all cards.""" """List view for all cards."""
permission_required = "core.view_cards_rule" permission_required = "kort.view_cards_rule"
template_name = "kort/card/list.html" template_name = "kort/card/list.html"
model = Card model = Card
table_class = CardTable table_class = CardTable
def get_queryset(self): def get_queryset(self):
return Card.objects.order_by("-pk") qs = Card.objects.order_by("-pk")
if not self.request.user.has_perm("kort.view_card"):
return get_objects_for_user(self.request.user, "kort.view_card", qs)
return qs
class CardIssueView(PermissionRequiredMixin, RevisionMixin, CookieWizardView): class CardIssueView(PermissionRequiredMixin, RevisionMixin, CookieWizardView):
"""View used to issue one or more cards.""" """View used to issue one or more cards."""
permission_required = "core.create_card_rule" permission_required = "kort.create_card_rule"
context_object_name = "application" context_object_name = "application"
template_name = "kort/card/issue.html" template_name = "kort/card/issue.html"
form_list = [CardIssueForm, CardIssueFinishForm] form_list = [CardIssueForm, CardIssueFinishForm]
...@@ -161,7 +151,7 @@ class CardIssueView(PermissionRequiredMixin, RevisionMixin, CookieWizardView): ...@@ -161,7 +151,7 @@ class CardIssueView(PermissionRequiredMixin, RevisionMixin, CookieWizardView):
class CardDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView): class CardDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
"""View used to delete a card.""" """View used to delete a card."""
permission_required = "core.delete_card_rule" permission_required = "kort.delete_card_rule"
success_url = reverse_lazy("cards") success_url = reverse_lazy("cards")
template_name = "kort/card/delete.html" template_name = "kort/card/delete.html"
model = Card model = Card
...@@ -171,7 +161,7 @@ class CardDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView) ...@@ -171,7 +161,7 @@ class CardDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView)
class CardDeactivateView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View): class CardDeactivateView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View):
"""View used to deactivate a card.""" """View used to deactivate a card."""
permission_required = "core.delete_card_rule" permission_required = "kort.deactivate_card_rule"
model = Card model = Card
success_url = reverse_lazy("cards") success_url = reverse_lazy("cards")
...@@ -185,7 +175,7 @@ class CardDeactivateView(PermissionRequiredMixin, RevisionMixin, SingleObjectMix ...@@ -185,7 +175,7 @@ class CardDeactivateView(PermissionRequiredMixin, RevisionMixin, SingleObjectMix
class CardPrintView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View): class CardPrintView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View):
"""View used to create a print job for a card.""" """View used to create a print job for a card."""
permission_required = "core.delete_card_rule" permission_required = "kort.print_card_rule"
model = Card model = Card
success_url = reverse_lazy("cards") success_url = reverse_lazy("cards")
...@@ -214,13 +204,13 @@ class CardPrintView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, V ...@@ -214,13 +204,13 @@ class CardPrintView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, V
class CardDetailView(PermissionRequiredMixin, RevisionMixin, PrinterSelectMixin, DetailView): class CardDetailView(PermissionRequiredMixin, RevisionMixin, PrinterSelectMixin, DetailView):
permission_required = "core.view_card_rule" permission_required = "kort.view_card_rule"
model = Card model = Card
template_name = "kort/card/detail.html" template_name = "kort/card/detail.html"
class CardGeneratePDFView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View): class CardGeneratePDFView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View):
permission_required = "views.view_card_rule" permission_required = "views.edit_card_rule"
model = Card model = Card
def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
...@@ -253,28 +243,32 @@ class CardGeneratePDFView(PermissionRequiredMixin, RevisionMixin, SingleObjectMi ...@@ -253,28 +243,32 @@ class CardGeneratePDFView(PermissionRequiredMixin, RevisionMixin, SingleObjectMi
class CardPrinterListView(PermissionRequiredMixin, RevisionMixin, SingleTableView): class CardPrinterListView(PermissionRequiredMixin, RevisionMixin, SingleTableView):
"""List view for all card printers.""" """List view for all card printers."""
permission_required = "core.view_cardprinters_rule" permission_required = "kort.view_cardprinters_rule"
template_name = "kort/printer/list.html" template_name = "kort/printer/list.html"
model = CardPrinter model = CardPrinter
table_class = CardPrinterTable table_class = CardPrinterTable
def get_queryset(self): def get_queryset(self):
return CardPrinter.objects.all().annotate( qs = CardPrinter.objects.all().annotate(
jobs_count=Count( jobs_count=Count(
"jobs", filter=~Q(jobs__status__in=[PrintStatus.FINISHED, PrintStatus.FAILED]) "jobs", filter=~Q(jobs__status__in=[PrintStatus.FINISHED, PrintStatus.FAILED])
) )
) )
if not self.request.user.has_perm("kort.view_cardprinter"):
return get_objects_for_user(self.request.user, "kort.view_cardprinter", CardPrinter)
return qs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
CardPrinter.check_online_status_for_all() CardPrinter.check_online_status_for_all(self.get_queryset())
return context return context
class CardPrinterCreateView(PermissionRequiredMixin, RevisionMixin, AdvancedCreateView): class CardPrinterCreateView(PermissionRequiredMixin, RevisionMixin, AdvancedCreateView):
"""View used to create a card printer.""" """View used to create a card printer."""
permission_required = "core.create_cardprinter_rule" permission_required = "kort.create_cardprinter_rule"
template_name = "kort/printer/create.html" template_name = "kort/printer/create.html"
form_class = CardPrinterForm form_class = CardPrinterForm
model = CardPrinter model = CardPrinter
...@@ -287,7 +281,7 @@ class CardPrinterCreateView(PermissionRequiredMixin, RevisionMixin, AdvancedCrea ...@@ -287,7 +281,7 @@ class CardPrinterCreateView(PermissionRequiredMixin, RevisionMixin, AdvancedCrea
class CardPrinterEditView(PermissionRequiredMixin, RevisionMixin, AdvancedEditView): class CardPrinterEditView(PermissionRequiredMixin, RevisionMixin, AdvancedEditView):
"""View used to edit a card printer.""" """View used to edit a card printer."""
permission_required = "core.edit_cardprinter_rule" permission_required = "kort.edit_cardprinter_rule"
template_name = "kort/printer/edit.html" template_name = "kort/printer/edit.html"
form_class = CardPrinterForm form_class = CardPrinterForm
model = CardPrinter model = CardPrinter
...@@ -300,7 +294,7 @@ class CardPrinterEditView(PermissionRequiredMixin, RevisionMixin, AdvancedEditVi ...@@ -300,7 +294,7 @@ class CardPrinterEditView(PermissionRequiredMixin, RevisionMixin, AdvancedEditVi
class CardPrinterDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView): class CardPrinterDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
"""View used to delete a card printer.""" """View used to delete a card printer."""
permission_required = "core.delete_cardprinter_rule" permission_required = "kort.delete_cardprinter_rule"
success_url = reverse_lazy("card_printers") success_url = reverse_lazy("card_printers")
template_name = "kort/printer/delete.html" template_name = "kort/printer/delete.html"
model = CardPrinter model = CardPrinter
...@@ -308,7 +302,7 @@ class CardPrinterDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDele ...@@ -308,7 +302,7 @@ class CardPrinterDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDele
class CardPrinterDetailView(PermissionRequiredMixin, RevisionMixin, DetailView): class CardPrinterDetailView(PermissionRequiredMixin, RevisionMixin, DetailView):
permission_required = "core.view_cardprinter_rule" permission_required = "kort.view_cardprinter_rule"
model = CardPrinter model = CardPrinter
template_name = "kort/printer/detail.html" template_name = "kort/printer/detail.html"
...@@ -346,18 +340,24 @@ class CardLayoutFormMixin: ...@@ -346,18 +340,24 @@ class CardLayoutFormMixin:
class CardLayoutListView(PermissionRequiredMixin, RevisionMixin, SingleTableView): class CardLayoutListView(PermissionRequiredMixin, RevisionMixin, SingleTableView):
"""List view for all card layouts.""" """List view for all card layouts."""
permission_required = "core.view_cardlayouts_rule" permission_required = "kort.view_cardlayouts_rule"
template_name = "kort/card_layout/list.html" template_name = "kort/card_layout/list.html"
model = CardLayout model = CardLayout
table_class = CardLayoutTable table_class = CardLayoutTable
def get_queryset(self):
qs = super().get_queryset()
if not self.request.user.has_perm("kort.view_cardlayout"):
return get_objects_for_user(self.request.user, "kort.view_cardlayout", CardPrinter)
return qs
class CardLayoutCreateView( class CardLayoutCreateView(
PermissionRequiredMixin, CardLayoutFormMixin, RevisionMixin, AdvancedCreateView PermissionRequiredMixin, CardLayoutFormMixin, RevisionMixin, AdvancedCreateView
): ):
"""View used to create a card layout.""" """View used to create a card layout."""
permission_required = "core.create_cardlayout_rule" permission_required = "kort.create_cardlayout_rule"
template_name = "kort/card_layout/create.html" template_name = "kort/card_layout/create.html"
form_class = CardLayoutForm form_class = CardLayoutForm
model = CardLayout model = CardLayout
...@@ -375,7 +375,7 @@ class CardLayoutEditView( ...@@ -375,7 +375,7 @@ class CardLayoutEditView(
): ):
"""View used to edit a card layout.""" """View used to edit a card layout."""
permission_required = "core.edit_cardlayout_rule" permission_required = "kort.edit_cardlayout_rule"
template_name = "kort/card_layout/edit.html" template_name = "kort/card_layout/edit.html"
form_class = CardLayoutForm form_class = CardLayoutForm
model = CardLayout model = CardLayout
...@@ -388,7 +388,7 @@ class CardLayoutEditView( ...@@ -388,7 +388,7 @@ class CardLayoutEditView(
class CardLayoutDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView): class CardLayoutDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
"""View used to delete a card layout.""" """View used to delete a card layout."""
permission_required = "core.delete_cardlayout_rule" permission_required = "kort.delete_cardlayout_rule"
success_url = reverse_lazy("card_layouts") success_url = reverse_lazy("card_layouts")
template_name = "kort/card_layout/delete.html" template_name = "kort/card_layout/delete.html"
model = CardLayout model = CardLayout
...@@ -396,13 +396,13 @@ class CardLayoutDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDelet ...@@ -396,13 +396,13 @@ class CardLayoutDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDelet
class CardLayoutDetailView(PermissionRequiredMixin, RevisionMixin, DetailView): class CardLayoutDetailView(PermissionRequiredMixin, RevisionMixin, DetailView):
permission_required = "core.view_cardlayout_rule" permission_required = "kort.view_cardlayout_rule"
model = CardLayout model = CardLayout
template_name = "kort/card_layout/detail.html" template_name = "kort/card_layout/detail.html"
class CardPrinterConfigView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View): class CardPrinterConfigView(PermissionRequiredMixin, RevisionMixin, SingleObjectMixin, View):
permission_required = "core.view_cardprinter_rule" permission_required = "kort.view_cardprinter_rule"
model = CardPrinter model = CardPrinter
def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse: def get(self, request: HttpRequest, *args, **kwargs) -> HttpResponse:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment