forum and core: remove CanViewSearchMixin and use specialized view instead

This commit is contained in:
Antoine Bartuccio 2018-12-07 11:49:06 +01:00 committed by Skia
parent 1de77f2fdd
commit 884855c178
3 changed files with 13 additions and 29 deletions

View File

@ -201,29 +201,6 @@ class CanViewMixin(View):
return super(CanViewMixin, self).dispatch(request, *arg, **kwargs) return super(CanViewMixin, self).dispatch(request, *arg, **kwargs)
class CanViewSearchMixin(View):
"""
This view removes all forbidden content from a SearchQuerySet
"""
def dispatch(self, request, *arg, **kwargs):
queryset = self.get_queryset()
excluded = [
o.object.id for o in queryset if not can_view(o.object, request.user)
]
self._queryset = queryset
def get_qs(self2):
q = self2._queryset.exclude(id__in=excluded)
resp = [r.object for r in q]
return resp
self.get_queryset = types.MethodType(get_qs, self)
return super(CanViewSearchMixin, self).dispatch(request, *arg, **kwargs)
class FormerSubscriberMixin(View): class FormerSubscriberMixin(View):
""" """
This view check if the user was at least an old subscriber This view check if the user was at least an old subscriber

View File

@ -331,9 +331,9 @@ class ForumMessage(models.Model):
return user.can_edit(self.topic.forum) return user.can_edit(self.topic.forum)
def can_be_viewed_by(self, user): def can_be_viewed_by(self, user):
return not self._deleted and self.topic.can_be_viewed_by( # No need to check the real rights since it's already done by the Topic view
user # and it impacts performances too much
) # Useful in search engine return not self._deleted
def can_be_moderated_by(self, user): def can_be_moderated_by(self, user):
return self.topic.forum.is_owned_by(user) or user.id == self.author.id return self.topic.forum.is_owned_by(user) or user.id == self.author.id

View File

@ -42,19 +42,26 @@ from core.views import (
CanEditMixin, CanEditMixin,
CanEditPropMixin, CanEditPropMixin,
CanCreateMixin, CanCreateMixin,
CanViewSearchMixin, can_view,
) )
from core.views.forms import MarkdownInput from core.views.forms import MarkdownInput
from forum.models import Forum, ForumMessage, ForumTopic, ForumMessageMeta from forum.models import Forum, ForumMessage, ForumTopic, ForumMessageMeta
from haystack.query import SearchQuerySet from haystack.query import SearchQuerySet
class ForumSearchView(CanViewSearchMixin, ListView): class ForumSearchView(ListView):
template_name = "forum/search.jinja" template_name = "forum/search.jinja"
def get_queryset(self): def get_queryset(self):
query = self.request.GET.get("query", "") query = self.request.GET.get("query", "")
return SearchQuerySet().models(ForumMessage).autocomplete(auto=query) queryset = SearchQuerySet().models(ForumMessage).autocomplete(auto=query)
excluded = [
o.object.id
for o in queryset
if not can_view(o.object.topic, self.request.user)
]
queryset.exclude(id__in=excluded)
return [r.object for r in queryset]
class ForumMainView(ListView): class ForumMainView(ListView):