我正在与Django一起制作一个爱好项目来存储我的想法,如下所示:
class Idea(models.Model):
name = models.CharField(unique=True, max_length=50)
description = models.TextField()
in_process = models.BooleanField()
is_done = models.BooleanField()
group = models.ForeignKey(Group, on_delete=models.CASCADE, blank=False)
class Group(models.Model):
name = models.CharField(unique=True, max_length=25)
description = models.CharField(max_length=50, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=False)
有没有办法限制当前登录的用户能够查看或修改其他用户使用基于通用类的视图创建的构思和构思组吗?
class GroupDelete(LoginRequiredMixin, generic.DeleteView):
model = Group
pk_url_kwarg = "id"
success_url = reverse_lazy('ideas:list')
...和一个网址例如:
urlpatterns = [
path('<int:id>/delete', views.GroupDelete.as_view(), name='delete'),
]
我正在使用Django 2.0。
答案 0 :(得分:1)
我建议您在继承LoginRequiredMixin
的位置编写自定义mixin,然后添加自己的逻辑,验证当前登录的用户(可以从request.user
审核)是实际创建Group
对象的人。
简单的例子看起来像这样:
# mixins.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseNotFound, HttpResponseRedirect
class YourCustomMixin(LoginRequiredMixin):
def dispatch(self, request, *args, **kwargs):
can_access = ... logic to check if user can access Group ...
disp = super().dispatch(request, *args, **kwargs)
if not isinstance(disp, HttpResponseRedirect) and not can_access:
return HttpResponseNotFound()
return disp
获得can_access
标记的值后,调用LoginRequiredMixin
的{{1}}方法并检查该调用的结果是否为重定向(到登录页面)并检查dispatch
标记,然后返回can_access
或原始HttpResponseNotFound()
结果。
当然,您也可以返回disp
而不是HttpResponseForbidden()
。
然后,您可以在视图中使用它,例如:
HttpResponseNotFound()