Skip to content

Commit 57667c5

Browse files
committed
[fix] gnuboard#625 게시글 수정시 작성자 검증 로직 수정
관리자 - 비밀번호 없이 모든 글 수정 가능하도록 변경
1 parent 87e4ac8 commit 57667c5

File tree

7 files changed

+46
-16
lines changed

7 files changed

+46
-16
lines changed

api/v1/routers/board.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,9 @@ async def api_update_post(
243243
service.validate_secret_board(wr_data.secret, wr_data.html, wr_data.mail)
244244
service.validate_post_content(wr_data.wr_subject)
245245
service.validate_post_content(wr_data.wr_content)
246-
service.arrange_data(wr_data, wr_data.secret, wr_data.html, wr_data.mail)
246+
service.arrange_data(
247+
wr_data, wr_data.secret, wr_data.html, wr_data.mail, is_update=True
248+
)
247249
service.save_write(write, wr_data)
248250
service.set_notice(write.wr_id, wr_data.notice)
249251
service.update_children_category(wr_data)

bbs/board.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,14 @@ async def create_post(
327327
set_write_delay(service.request)
328328
service.delete_auto_save(uid)
329329
service.save_secret_session(write.wr_id, secret)
330-
service.upload_files(file_service, write, files, file_content, file_dels)
330+
service.upload_files(
331+
file_service,
332+
write,
333+
files,
334+
file_content,
335+
file_dels,
336+
password_verified=True
337+
)
331338
service.delete_cache()
332339
redirect_url = service.get_redirect_url(write)
333340
db.commit()
@@ -356,12 +363,19 @@ async def update_post(
356363
service.validate_secret_board(secret, html, mail)
357364
service.validate_post_content(form_data.wr_subject)
358365
service.validate_post_content(form_data.wr_content)
359-
service.arrange_data(form_data, secret, html, mail)
366+
service.arrange_data(form_data, secret, html, mail, is_update=True)
360367
service.save_secret_session(wr_id, secret)
361368
service.save_write(write, form_data)
362369
service.set_notice(wr_id, notice)
363370
service.delete_auto_save(uid)
364-
service.upload_files(file_service, write, files, file_content, file_dels)
371+
service.upload_files(
372+
file_service,
373+
write,
374+
files,
375+
file_content,
376+
file_dels,
377+
password_verified=True
378+
)
365379
service.update_children_category(form_data)
366380
service.delete_cache()
367381
redirect_url = service.get_redirect_url(write)

service/board/board.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ def validate_write_level(self):
8585

8686
def validate_author(self, write: WriteBaseModel, wr_password: str = None):
8787
"""작성자 확인"""
88+
if self.member.admin_type:
89+
return
90+
8891
if not is_owner(write, self.member.mb_id) and not validate_password(wr_password, write.wr_password):
8992
self.raise_exception(detail="작성자만 수정/삭제 할 수 있습니다.", status_code=403)
9093

@@ -188,7 +191,14 @@ def get_cleaned_data(self, content):
188191
"""Stored XSS 방지용 데이터 정제"""
189192
return content_sanitizer.get_cleaned_data(content)
190193

191-
def arrange_data(self, data: Union[WriteForm, WriteModel], secret: str, html: str, mail: str):
194+
def arrange_data(
195+
self,
196+
data: Union[WriteForm, WriteModel],
197+
secret: str,
198+
html: str,
199+
mail: str,
200+
is_update: bool =False
201+
):
192202
"""
193203
form 또는 body 형태로 들어오는 데이터를 양식에 맞게 정리
194204
- 항목: ca_name, wr_password, wr_name, wr_email, wr_homepage, wr_option, wr_link1, wr_link2, wr_content
@@ -204,7 +214,8 @@ def arrange_data(self, data: Union[WriteForm, WriteModel], secret: str, html: st
204214
data.ca_name = ""
205215
self.validate_wr_password(data.wr_password)
206216
data.wr_password = create_hash(data.wr_password) if data.wr_password else ""
207-
data.wr_name = self.set_wr_name(self.member, data.wr_name)
217+
if not is_update:
218+
data.wr_name = self.set_wr_name(self.member, data.wr_name)
208219
data.wr_email = getattr(self.member, "mb_email", data.wr_email)
209220
data.wr_homepage = getattr(self.member, "mb_homepage", data.wr_homepage)
210221

@@ -249,7 +260,8 @@ def upload_files(
249260
write: WriteBaseModel,
250261
file_list: List[UploadFile],
251262
file_content: List[str] = None,
252-
file_dels: list = None
263+
file_dels: list = None,
264+
password_verified: bool = False
253265
):
254266
"""파일 업로드"""
255267
# files = []
@@ -258,7 +270,9 @@ def upload_files(
258270
# if getattr(file, "size", None):
259271
# files.append(file)
260272

261-
if self.member.mb_id and self.member.mb_id != write.mb_id:
273+
is_not_same_mb_id = self.member.mb_id and self.member.mb_id != write.mb_id
274+
275+
if not self.member.admin_type and is_not_same_mb_id and not password_verified:
262276
self.raise_exception(status_code=403, detail="자신의 글에만 파일을 업로드할 수 있습니다.")
263277

264278
if not self.is_upload_level():

templates/basic/board/basic/write_form.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@
4848
</div>
4949
{% endif %}
5050

51-
{% if not login_member or (is_admin and write and write.mb_id != login_member.mb_id) %}
51+
{% if not login_member or (write and write.mb_id != login_member.mb_id) %}
5252
<div class="write_writer">
5353
<label for="wr_name" class="blind">이름<strong>필수</strong></label>
5454
<input type="text" name="wr_name" value="{{ write.wr_name if write else login_member.mb_name }}" id="wr_name" required class="frm_input required" maxlength="20" placeholder="이름">
5555
<label for="wr_password" class="blind">비밀번호<strong>필수</strong></label>
56-
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" maxlength="20" placeholder="비밀번호">
56+
<input type="password" name="wr_password" id="wr_password" {% if not request.state.is_super_admin %}required{% endif %} class="frm_input {% if not request.state.is_super_admin %}required{% endif %}" maxlength="20" placeholder="비밀번호">
5757
<label for="wr_email" class="blind">이메일</label>
5858
<input type="email" name="wr_email" value="{{ write.wr_email if write else login_member.mb_email }}" id="wr_email" class="frm_input email" maxlength="100" placeholder="이메일">
5959
<label for="wr_homepage" class="blind">홈페이지</label>

templates/basic/board/gallery/write_form.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@
4848
</div>
4949
{% endif %}
5050

51-
{% if not login_member or (is_admin and write and write.mb_id != login_member.mb_id) %}
51+
{% if not login_member or (write and write.mb_id != login_member.mb_id) %}
5252
<div class="write_writer">
5353
<label for="wr_name" class="blind">이름<strong>필수</strong></label>
5454
<input type="text" name="wr_name" value="{{ write.wr_name if write else login_member.mb_name }}" id="wr_name" required class="frm_input required" maxlength="20" placeholder="이름">
5555
<label for="wr_password" class="blind">비밀번호<strong>필수</strong></label>
56-
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" maxlength="20" placeholder="비밀번호">
56+
<input type="password" name="wr_password" id="wr_password" {% if not request.state.is_super_admin %}required{% endif %} class="frm_input {% if not request.state.is_super_admin %}required{% endif %}" maxlength="20" placeholder="비밀번호">
5757
<label for="wr_email" class="blind">이메일</label>
5858
<input type="email" name="wr_email" value="{{ write.wr_email if write else login_member.mb_email }}" id="wr_email" class="frm_input email" maxlength="100" placeholder="이메일">
5959
<label for="wr_homepage" class="blind">홈페이지</label>

templates/basic/mobile/board/basic/write_form.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@
4848
</div>
4949
{% endif %}
5050

51-
{% if not login_member or (is_admin and write and write.mb_id != login_member.mb_id) %}
51+
{% if not login_member or (write and write.mb_id != login_member.mb_id) %}
5252
<div class="write_writer">
5353
<label for="wr_name" class="blind">이름<strong>필수</strong></label>
5454
<input type="text" name="wr_name" value="{{ write.wr_name if write else login_member.mb_name }}" id="wr_name" required class="frm_input required" maxlength="20" placeholder="이름">
5555
<label for="wr_password" class="blind">비밀번호<strong>필수</strong></label>
56-
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" maxlength="20" placeholder="비밀번호">
56+
<input type="password" name="wr_password" id="wr_password" {% if not request.state.is_super_admin %}required{% endif %} class="frm_input {% if not request.state.is_super_admin %}required{% endif %}" maxlength="20" placeholder="비밀번호">
5757
<label for="wr_email" class="blind">이메일</label>
5858
<input type="email" name="wr_email" value="{{ write.wr_email if write else login_member.mb_email }}" id="wr_email" class="frm_input email" maxlength="100" placeholder="이메일">
5959
<label for="wr_homepage" class="blind">홈페이지</label>

templates/basic/mobile/board/gallery/write_form.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@
4848
</div>
4949
{% endif %}
5050

51-
{% if not login_member or (is_admin and write and write.mb_id != login_member.mb_id) %}
51+
{% if not login_member or (write and write.mb_id != login_member.mb_id) %}
5252
<div class="write_writer">
5353
<label for="wr_name" class="blind">이름<strong>필수</strong></label>
5454
<input type="text" name="wr_name" value="{{ write.wr_name if write else login_member.mb_name }}" id="wr_name" required class="frm_input required" maxlength="20" placeholder="이름">
5555
<label for="wr_password" class="blind">비밀번호<strong>필수</strong></label>
56-
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" maxlength="20" placeholder="비밀번호">
56+
<input type="password" name="wr_password" id="wr_password" {% if not request.state.is_super_admin %}required{% endif %} class="frm_input {% if not request.state.is_super_admin %}required{% endif %}" maxlength="20" placeholder="비밀번호">
5757
<label for="wr_email" class="blind">이메일</label>
5858
<input type="email" name="wr_email" value="{{ write.wr_email if write else login_member.mb_email }}" id="wr_email" class="frm_input email" maxlength="100" placeholder="이메일">
5959
<label for="wr_homepage" class="blind">홈페이지</label>

0 commit comments

Comments
 (0)