python - Django 用户权限/视图?
问题描述
我正在使用基于 Django 类的视图。
视图.py
class ReportListView(LoginRequiredMixin, ListView):
model = Report
def get_queryset(self):
queryset = Report.objects.filter(user=self.request.user)
return queryset
class ReportDetailView(LoginRequiredMixin, DetailView):
model = Report
class ReportUpdateView(LoginRequiredMixin, UpdateView):
model = Report
class ReportCreateView(LoginRequiredMixin, CreateView):
model = Report
class ReportDeleteView(DeleteView):
model = Report
如您所见,这些是最通用的视图,但它们都应该只代表当前用户的数据。
目前任何用户都可以查看/查看其他用户数据。
我看到的一种方式是人们会定义他们的 get_queryset 方法,就像上面一样。这种方法只过滤渲染的数据,但用户仍然可以通过 url 访问禁止的数据(前提是他知道/猜测了 id)。
如何限制对其他用户资源的访问?
解决方案
I've figured it out. I created a Mixin where the queryset is evaluated against the user.
class BaseMixin(object):
def get_queryset(self):
return DnevnaBiljeska.objects.filter(igrac=self.request.user.igrac)
class ReportListView(LoginRequiredMixin, BaseMixin, ListView):
model = Report
This way i can call super on further queryset filtering for each view individually.
推荐阅读
- javascript - 如何使用construct_homepage_panels 钩子将Chart.js 添加到Wagtail 主页面板?
- r - 在文本挖掘时删除撇号,或者不
- discord - 如何修复 role.setPermissions 函数错误?
- python - Python NLP:如何从 textblob 打印格式化的单词列表。?(作为图像附加的输出)
- regex - 在段落中查找匹配的字符串
- javascript - react-router-dom - 当用户单击按钮时,无法隔离 LinkAnchor Tag 中的路径
- android - Flutter 初始化失败,java.lang.UnsatisfiedLinkError: dlopen failed: library "libflutter.so" not found
- javascript - 如何使用 FlatList 从一个屏幕导航到另一个屏幕
- python - 使用 Flask 时如何将传递的数据重新传递到另一个 HTML 页面?
- reactjs - 如何将成功登录从 Axios 重定向到另一个页面?