如何确保过滤后的更新视图是安全的?

时间:2017-06-16 16:16:06

标签: django django-views

我已经列出了属于名为Manager的群组的用户的列表视图。 我已经建立了一个链接来编辑这些用户。

链接如下:http://localhost:8000/en/manager/edit/12

所以这是关于"编辑用户编号12"。

如果您手动将12更改为1,它就有效......那么正确确保您正在编辑的用户属于群组Manager的方法是什么? ?

如果用户不属于get_object群组,我已尝试覆盖None并返回Manager,但它没有意义:

def get_object(self, queryset=None):
    group = Group.objects.get(name="Manager")
    try:
        return User.objects\
                   .filter(groups__in=[group])\
                   .get(pk=self.kwargs.get('pk'))
    except User.DoesNotExist:
        return None

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我已经覆盖了这样的get()方法:

class ManagerUpdateView(LoginRequiredMixin, generic.UpdateView):
    model = User
    form_class = RegisterManagerForm
    template_name = 'crud/manager/update.html'

    def get(self, request, *args, **kwargs):
        group = Group.objects.get(name="Manager")
        try:
            User.objects.filter(groups__in=[group])\
                        .get(pk=self.kwargs.get('pk'))
        except User.DoesNotExist:
            return redirect(reverse_lazy('manager_list'))
        return super(ManagerUpdateView, self).get(request,
                                                  *args, **kwargs)