diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index 75579780556b4ff36ce965df03838a1a83c48534..25e7149e4bd1b8cce63eed54fde08472706ddb8a GIT binary patch literal 11565 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 F{wGw|c!U4| diff --git a/boards/locale/ru/LC_MESSAGES/django.po b/boards/locale/ru/LC_MESSAGES/django.po --- a/boards/locale/ru/LC_MESSAGES/django.po +++ b/boards/locale/ru/LC_MESSAGES/django.po @@ -590,3 +590,6 @@ msgstr "Некоторые файлы уже присутствуют на борде." msgid "Do not download URLs" msgstr "Не загружать ссылки" +msgid "Ban and delete" +msgstr "Забанить и удалить" + diff --git a/boards/models/post/manager.py b/boards/models/post/manager.py --- a/boards/models/post/manager.py +++ b/boards/models/post/manager.py @@ -7,6 +7,7 @@ from boards.abstracts.exceptions import from django.db import models, transaction from django.utils import timezone from django.dispatch import Signal +from django.core.exceptions import PermissionDenied import boards @@ -43,7 +44,7 @@ class PostManager(models.Manager): is_banned = False if is_banned: - raise BannedException("This user is banned") + raise PermissionDenied() if not tags: tags = [] diff --git a/boards/templates/boards/post.html b/boards/templates/boards/post.html --- a/boards/templates/boards/post.html +++ b/boards/templates/boards/post.html @@ -100,7 +100,7 @@ visible: {% if post.global_id_id %}true{% else %}false{% endif %} }, banAndDelete: { - name: 'Ban and delete', + name: '{% trans "Ban and delete" %}', callback: function(key, opt) { window.location = '{% url 'utils' %}?method=ban_and_delete&post_id={{ post.id }}'; }, diff --git a/boards/views/utils.py b/boards/views/utils.py --- a/boards/views/utils.py +++ b/boards/views/utils.py @@ -1,6 +1,8 @@ from django.shortcuts import redirect from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_protect +from django.contrib.auth.decorators import permission_required + from boards.views.base import BaseBoardView, CONTEXT_FORM from boards.views.mixins import DispatcherMixin, PARAMETER_METHOD from boards.models import Post, Ban @@ -13,7 +15,7 @@ class UtilsView(BaseBoardView, Dispatche return redirect('index') - + @permission_required('boards.delete_post') def ban_and_delete(self, request): post = Post.objects.get(id=request.GET['post_id']) Ban.objects.get_or_create(ip=post.poster_ip)