Пользовательские разрешения 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):