Пользовательские разрешения Django viewflow

Возможно, что-то простое. Я пытаюсь следовать примеру из книги рецептов по следующей ссылке https://github.com/viewflow/cookbook/tree/master/guardian. За исключением пары несвязанных различий между примером и моим собственным кодом (я не использую frontend и использую пользовательские представления). Все остальное работает как ожидалось. Я не понимаю, что я делаю неправильно с точки зрения разрешений.

Я получаю ошибку "403 forbidden" всякий раз, когда пользователь, отличный от того, который запустил процесс, пытается взаимодействовать с потоком. Это происходит независимо от назначенных пользователю разрешений - это ожидаемое поведение или мне следует открыть тикет на Github?

В то время как я пытаюсь понять, может ли viewflow поддерживать то, чего я пытаюсь достичь - я хотел бы оставить проверку разрешений на моих собственных представлениях (а не на встроенных проверках). Я видел, что есть запрос на исправление https://github.com/viewflow/viewflow/issues/252 - однако, я не понимаю, как его реализовать.

Любая помощь будет оценена по достоинству! Застрял на этом довольно давно

Разрешения определены в пользовательском классе пользователя

accounts/models.py

class Department(models.Model):
    name = models.CharField(unique=True, max_length=250)
    description = models.TextField(blank=True)

    objects = managers.DepartmentManager()

    class Meta:
        permissions = [
            ('can_accept_bill', 'Can accept department bill'),
            ('can_validate_bill', 'Can validate department bill'),
            ('can_set_bill_paydate', 'Can set payment date for department bill'),
            ('can_pay_bill', 'Can pay department bill'),

flows.py

class OrderFlow(Flow):

    process_class = models.OrderProccess
    task_class = models.OrderTask
    lock_impl = select_for_update_lock

    start = (
        flow.Start(
            views.StartView)
        .Permission(auto_create=True)
        .Next(this.approve_budget)
    )

    approve_budget = (
        flow.View(
            views.BudgetApprovalView)
#        .Permission(auto_create=True)
        .Permission(
            'order.can_accept_bill',
            obj= lambda act: act.process.order.department
        )
        .Assign(lambda act: act.process.created_by)
        .Next(this.check_budget_approval)
    )

    check_budget_approval = (
        flow.If(
            cond=lambda act: act.process.order.budgetholder_approved
        )
        .Then(this.approve_finance)
        .Else(this.approve_budget)
    )

    approve_finance = (
        flow.View(
            views.FinanceApprovalView)
        .Permission(auto_create=True)
        .Assign(lambda act: act.process.created_by)
        .Next(this.check_finance_approval)
    )

models.py

class Order(models.Model):
    department = models.ForeignKey(account_models.Department, on_delete=models.CASCADE)
    description = models.CharField(max_length=30)
    project = models.ForeignKey(project_models.Project, on_delete=models.CASCADE)

# other unrelated code

class OrderProccess(Process):
    order = models.ForeignKey(Order, blank=True, null=True, on_delete=models.CASCADE)


class OrderTask(Task):
    class Meta:
        proxy = True

views.py

class StartView(StartFlowMixin, generic.UpdateView):
    model = models.Order
    form_class = forms.OrderForm

    def get_object(self):
        return self.activation.process.order

# other form handling code

class OrderView(FlowMixin, generic.UpdateView):

    def get_object(self):
        return self.activation.process.order

class BudgetApprovalView(FlowMixin, generic.UpdateView):
    form_class = forms.BudgetHolderApproval

    def get_object(self):
Вернуться на верх