django多个用户权限装饰器

时间:2018-05-28 20:50:22

标签: python django python-decorators user-permissions

我正在处理发票申请,我有3个不同的角色。我有一名行政人员,财务人员和一名客户。

所有财务部分视图都受自定义财务员工权限装饰者的保护,管理和客户视图也是如此。

但是我希望django超级用户的构建能够获得所有视图的权限,但不知何故这似乎不起作用。请参阅下面的示例视图:

@method_decorator(admin_required, name='dispatch')
@method_decorator(financial_employee_required, name='dispatch')
@method_decorator(login_required, name='dispatch')
class InvoiceListView(generic.ListView):
    queryset = Invoice.objects.filter(complete=False)

这些是装饰者:

def admin_required(function=None,redirect_field_name=REDIRECT_FIELD_NAME,login_url='home'):
    actual_decorator = user_passes_test(
    lambda u: u.is_active and u.is_superuser,
    login_url=login_url,
    redirect_field_name=redirect_field_name,
    )
    if function:
        return actual_decorator

def financial_employee_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url='home'):
    actual_decorator = user_passes_test(
    lambda u: u.is_active and u.is_financial_employee,
    login_url=login_url,
    redirect_field_name=redirect_field_name,
)
    if function:
        return actual_decorator(function)
    return actual_decorator

这根本不起作用。我只能让超级用户登录或财务员工。我究竟做错了什么?我如何通过2个不同的角色进行视图访问?因为我试图阻止让超级用户使用django管理面板。

0 个答案:

没有答案