如何根据用户权限正确处理请求Django

How to properly handle request based on user's permissions Django

使用 Django,我有一个基于 class 的视图,可以从我的数据库中获取 items 的列表。事情是这个列表不应该被每个用户访问。没有管理员或 is_staff 权限的用户应该能够看到所有项目,而没有此权限的普通帐户只能访问他们的 items.

我想知道我应该如何实现它。

有一个基于 class 的视图,我在其中检查用户是否是管理员,如果是,则取回所有项目。并有另一个基于 class 的视图,检查用户是否不是管理员,并仅为该用户取回所有项目。

有一个基于 class 的视图,我在其中检查用户是管理员还是非管理员,而那个 class 的视图根据 2 种不同的场景以不同方式处理请求。

我不确定“Django 方式”是什么,但我自然会选择第二种方法,但我想以防万一。

如果 “Django 方式” 是最简单、可读且最容易的,我认为这是基于 class 一次覆盖 get_queryset method查看:


class MyView(generic.ListView):
    template_name = 'my-template.html'
    paginate_by = 25

    def get_queryset(self):
        queryset = MyModel.objects
        # I dont remember if a superser is already staff
        # In this case this can be replaced by: if self.request.user.is_staff: only
        if self.request.user.is_staff or self.request.user.is_superuser:
            queryset = queryset.filter(...filters...)
        else:
            queryset = queryset.filter(...other filters...)

        return queryset