diff --git a/aleksis/apps/tezor/views.py b/aleksis/apps/tezor/views.py
index 9517888d7abb64cc30414a6f319bed978d47b750..06a4df8cd04be868ffc0cba7a601bc2c90ef22d3 100644
--- a/aleksis/apps/tezor/views.py
+++ b/aleksis/apps/tezor/views.py
@@ -21,7 +21,7 @@ from .models.invoice import Invoice, InvoiceGroup
 
 class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
 
-    permission_required = "tezor.can_print_invoice"
+    permission_required = "tezor.print_invoice_rule"
 
     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
@@ -33,23 +33,29 @@ class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
         return context
 
 
-def do_payment(request, token):
-    payment = get_object_or_404(get_payment_model(), token=token)
+class DoPaymentView(PermissionRequiredMixin, View):
 
-    if payment.status not in [PaymentStatus.WAITING, PaymentStatus.INPUT, PaymentStatus.REJECTED]:
-        return redirect(payment.get_success_url())
+    model = Invoice
+    permission_required = "tezor.do_payment_rule"
+    template_name = "tezor/invoice/payment.html"
+
+    def dispatch(self, request, token):
+        self.object = get_object_or_404(self.model, token=token)
+
+        if self.object.status not in [PaymentStatus.WAITING, PaymentStatus.INPUT, PaymentStatus.REJECTED]:
+            return redirect(self.object.get_success_url())
 
-    try:
-       form = payment.get_form(data=request.POST or None)
-    except RedirectNeeded as redirect_to:
-        return redirect(str(redirect_to))
+        try:
+            form = self.object.get_form(data=request.POST or None)
+        except RedirectNeeded as redirect_to:
+            return redirect(str(redirect_to))
 
-    context = {
-        "form": form,
-        "payment": payment,
-    }
+        context = {
+            "form": form,
+            "payment": self.object,
+        }
 
-    return render(request, "tezor/invoice/payment.html", context)
+        return render(request, self.template_name, context)
 
 
 class ClientListView(PermissionRequiredMixin, SingleTableView):