다른 사용자가 수정페이지에 접근하는 걸 막으려면 어떻게 하나요?
172
작성한 질문수 15
다른 사용자가 게시물 수정 페이지에 접근하는걸 막으려면 어떻게 해야 하나요?
로그인을 안한 사용자가 접근하는 건 뷰에 LoginRequiredMixin을 사용해서 막는데, 로그인은 했지만 작성자가 아닌 사용자가 접근하는 건 어떻게 막나 궁금합니다.
PostUpdate 뷰를 아래처럼 수정해봤지만 form_valid가 템플릿을 생성한 후에 실행되는 건지 리다이렉트가 안됩니다.
# /blog/post.pk/update/ GET
class PostUpdate(LoginRequiredMixin, UpdateView):
model = Post # 템플릿: post_form
fields = ['title', 'content', 'head_image', 'category', 'tags']
def form_valid(self, form):
current_user = self.request.user
pk = self.kwargs['pk']
current_post = Post.objects.get(pk=pk)
#
if current_user is current_post.author:
return super(type(self), self).for_valid(form)
else:
return redirect('/blog/1/')
다른 사용자의 접근을 막는 방법과 form_valid가 언제 실행되는지 알려주시면 감사하겠습니다.
답변 1
1
아래와 같이 dispatch를 추가해보세요.
dispatch() 메서드는 방문자가 웹 사이트 서버에 GET 방식으로 요청했는지 POST 방식으로 요청했는지 판단하는 기능을 합니다. CreateView나 현재 사용하고 있는 UpdateView의 경우 방문자가 서버에 GET 방식으로 들어오면 포스트를 작성할 수 있는 폼 페이지를 보내줍니다.
만약 권한이 없는 사용자가 PostUpdate를 사용하려고 한다면 서버와 통신하는 방식이 GET방식이든 POST 방식이든 상관없이 접근할 수 없게 해야 합니다. 따라서 dispatch()가 실행될때 작성자인지 확인하면 됩니다. 작성자가 아니라면 "권한없음"오류를 나타냅니다.
from django.core.exceptions import PermissionDenied
(생략)
class PostUpdate(LoginRequiredMixin, UpdateView):
model = Post
fields = [‘title’, ‘hook_text’, ‘content’, ‘head_image’, ‘file_upload’, ‘category’, ‘tags’]
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated and request.user == self.get_object().author:
return super(PostUpdate, self).dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
(생략)
후속 강의
0
386
1
완성했습니다. 감사합니다
0
313
2
오늘 vps 에 domain 을 지정해주고 아직 활성화되지 않았는데
0
290
1
test 결과 두 가지 error 가 발생했습니다. 뭐가 잘못된 건지 도저히 모르겠습니다.
0
413
1
accounts/login 이 존재하지 않는다고 나옵니다
0
262
2
코드 질문입니다
0
244
1
포스트에 markdown을 사용해서 이미지를 추가할때
0
307
1
New Post 관련 질문드립니다.
0
175
1
이번 영상부터 각 포스트에 프리뷰 사진이 달라지셔서 질문 드립니다.
0
330
1
base 작업한 후 Category가 블로그 하단으로 내려갔습니다.
0
249
1
혹시 소스코드 전체가 담긴 주소를 좀 알 수 있을까요?
0
261
1
9분 경 테스트에서 Assretion Error가 발생합니다.
0
230
1
파이참 초기 설치 후 설정 관련해서 git에 항상 add되는 옵션을 체크했습니다.
0
336
3
F12를 눌러 console 창에서 오류를 확인할때 몇번째 줄인지 나오지 않습니다.
0
393
1
post view도 delete하려는데 막혀서 ㅠㅠ
0
192
1
"GET / HTTP/1.1" 400 143 그리고 "GET / HTTP/1.1" 404 2031
0
3299
3
연결이 안됩니다
0
495
8
서버에 연결하고 나면 그 후에 Cmder가 작동이 안되요
0
371
2
서버에 배포후 어드민계정
0
583
2
안녕하세요! 실서버에 올린 sqlite3의 데이터를 직접 확인하려면 어찌하나요?
0
2032
3
gitignore안먹히는현상
0
287
1
cmder 종료시 서버도 같이 종료됩니다.
0
215
1
' python manage.py makemigration blog ' 명령어 에러
0
582
2
python manage.py makemigrations 를 했을 때 오류가 납니다.
0
552
2





