【问题标题】:How to properly handle request based on user's permissions Django [closed]如何根据用户的权限正确处理请求 Django [关闭]
【发布时间】:2021-12-22 10:46:59
【问题描述】:

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

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

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

有一个基于类的视图,我可以在其中检查用户是管理员还是非管理员,并且一个基于类的视图会根据两种不同的场景以不同的方式处理请求。

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

【问题讨论】:

    标签: django authentication view


    【解决方案1】:

    如果“Django 方式” 是最简单、易读、最简单的,我认为那是在一个基于类的视图中覆盖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
    
    
    

    【讨论】:

    • 谢谢,但实际上我的意思是“Django 方式”是最佳实践
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多