Как заблокировать доступ к странице для другого вошедшего пользователя в django?

Я пытаюсь заблокировать доступ вошедшего пользователя к странице обновления профиля другого пользователя.

Моя ситуация:

Предположим, что человек A вошел в свой профиль и знает URl обновления профиля другого пользователя. В этой ситуации он может просто получить доступ к URL обновления профиля другого пользователя. Таким образом, я хочу ограничить это ограничение только для того же пользователя, который вошел в систему, чтобы обновлять только свой профиль.

вот мой код для обновления профилей:

@login_required
def UpdateProfile(request, slug):
    user = Profile.objects.get(slug=slug)
    if request.method == "POST":
        form = UpdateProfileForm(request.POST, request.FILES, instance=user)
        if form.is_valid():
            profile_pic = form.cleaned_data['profile_pic']
            form.profile_pic = profile_pic
            form.save()
            messages.success(request,"Data Updated successfully")
            return HttpResponseRedirect(reverse('updateaddress', args=(request.user.profile.slug,)))
        else:
            messages.error(request, "Please check all fields are valid")
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    else:
        form = UpdateProfileForm(instance=user)
    context = {
        'user':user,
        'form':form,
    }
    return render(request, "authentication/register/update/profile.html",context)

urls.py

path("<slug:slug>/update-profile/", UpdateProfile, name="updateprofile"),

Вы можете поступить следующим образом:

@login_required
def UpdateProfile(request, slug):
    user = Profile.objects.get(slug=slug)
    
    if user.id == request.user.id:
        # do something if the id of user you get from the slug matches the actual user id

    if request.method == "POST":
        form = UpdateProfileForm(request.POST, request.FILES, instance=user)
        if form.is_valid():
            # yada yada yada

Вы можете сравнить объект пользователя, как показано ниже

@login_required
def UpdateProfile(request, slug):
    user = Profile.objects.get(slug=slug)

    if user != request.user:
        message.info("You can't update the other user profile")
        return

Как описано здесь в документах django :-. https://docs.djangoproject.com/en/4.0/topics/db/queries/#comparing-objects

Вернуться на верх