Найти - Пользователи
Полная версия: защита данных одних пользователей от других. Как правильно?
Начало » Django » защита данных одних пользователей от других. Как правильно?
1
django314
В таблице имеется дополнительное поле profile_id, хранящее уникальное id профиля пользователя. Пользуюсь представлением на базе UpdateView. От редактирования данные удается защитить так:
class MyFormUpdate(LoginRequiredMixin,generic.UpdateView):
    model = Employee
    def form_valid(self, form):
        profile_id = ...
        record_id  = ...
        if profile_id == record_userprofile_id:
            return super(MyFormUpdate, self).form_valid(form)
        else:
           raise Http404(u"Как вам не стыдно %s" % self.request.user.get_username() )
Работает, редактировать чужие данные нельзя. Но, просмотреть чужие записи можно, перебирая числа:

myapp1/profile/update/Число

Число, как положено в стандартных View - это номер записи в таблице.

Как от этого защитить? Например, в шаблоне можно устроить проверку, но как туда передать данные из стандарной UpdateView? Может там как-то доступен залогиненый request.user и скрытое поле profile_id?

P.S. в принципе пользователя можно идентифицировать и по id из стандартного User.
Singularity
from django.http import Http404
class OwnerOnlyMixin(object):
    def get_object(self, queryset=None):
        obj = super(OwnerOnlyMixin, self).get_object()
        if (obj.owner_id == self.request.user.pk) :
            return obj
        raise Http404

.owner_id cмени на то как у тебя там поля ФК на модель пользователей называется
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB