Repository: zestedesavoir/zds-site

Issue:
Les sujets privés ne sont pas si privés que ça
Via poliorcetics [sur le forum](http://zestedesavoir.com/forums/sujet/273/les-petits-pixels/?page=27#p46178), il est possible en tant que membre simple ou invités de voir les titres/sous titre des topics sur la page de profil d'un membre du staff.

ça ressemble à une regression du refactoring des membres

Voir screen : 

![probleme-secu](https://cloud.githubusercontent.com/assets/6066015/6445299/4cd8dce4-c103-11e4-822e-99e7bbf23401.PNG)



Discussion:
Je suis presque sûr que c'est une régression aussi.

Le 2 mars 2015 17:41, firm1 notifications@github.com a écrit :

> Via poliorcetics sur le forum
> http://zestedesavoir.com/forums/sujet/273/les-petits-pixels/?page=27#p46178,
> il est possible en tant que membre simple ou invités de voir les
> titres/sous titre des topics sur la page de profil d'un membre du staff.
> 
> ça ressemble à une regression du refactoring des membres
> 
> Voir screen :
> 
> [image: probleme-secu]
> https://cloud.githubusercontent.com/assets/6066015/6445299/4cd8dce4-c103-11e4-822e-99e7bbf23401.PNG
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/zestedesavoir/zds-site/issues/2392.

Chose surprenante puisque la requête pour récupérer cette liste des sujets n'a pas changé.

[Requête sur la version 1.5-RC3](https://github.com/zestedesavoir/zds-site/blob/v1.5-RC3/zds/member/views.py#L253)

[Requête sur la version 1.6](https://github.com/zestedesavoir/zds-site/blob/v1.6/zds/forum/managers.py#L13)

@GerardPaligot sur les deux liens que tu montres, on voit bien que la méthode à changé.

Avant on avait 

```
exclude(Q(forum__group__isnull=False) & ~Q(forum__group__in=request.user.groups.all()))
```

Après on a 

```
exclude(Q(forum__group__isnull=False) & ~Q(forum__group__in=author.groups.all()))
```

La regression est bien là

Bien vu, je ne l'avais pas remarqué. Est-ce un hotfix ou une PR pour la release 1.7 ?

Je dirais hotfix car c'est un bug apparu dans la release

+1, et la fuite d'infos privées, c'est pas cool.

Bien, je m'en occupe ce soir alors.

@GerardPaligot tu as pu t'en occuper ?

Sorry, j'avais complètement oublié ! Du coup, je l'ai fais maintenant. Sur quelle branche je dois faire ma PR ?


Resolving patch:
diff --git a/zds/forum/managers.py b/zds/forum/managers.py
--- a/zds/forum/managers.py
+++ b/zds/forum/managers.py
@@ -10,9 +10,16 @@ class TopicManager(models.Manager):
     Custom topic manager.
     """
 
-    def last_topics_of_a_member(self, author):
+    def last_topics_of_a_member(self, author, user):
+        """
+        Gets last topics of a member but exclude all topics not accessible
+        for the request user.
+        :param author: Author of topics.
+        :param user: Request user.
+        :return: List of topics.
+        """
         return self.filter(author=author) \
-                   .exclude(Q(forum__group__isnull=False) & ~Q(forum__group__in=author.groups.all())) \
+                   .exclude(Q(forum__group__isnull=False) & ~Q(forum__group__in=user.groups.all())) \
                    .prefetch_related("author") \
                    .order_by("-pubdate") \
                    .all()[:settings.ZDS_APP['forum']['home_number']]
diff --git a/zds/member/views.py b/zds/member/views.py
--- a/zds/member/views.py
+++ b/zds/member/views.py
@@ -67,7 +67,7 @@ def get_context_data(self, **kwargs):
         usr = context['usr']
         profile = usr.profile
         context['profile'] = profile
-        context['topics'] = Topic.objects.last_topics_of_a_member(usr)
+        context['topics'] = Topic.objects.last_topics_of_a_member(usr, self.request.user)
         context['articles'] = Article.objects.last_articles_of_a_member_loaded(usr)
         context['tutorials'] = Tutorial.objects.last_tutorials_of_a_member_loaded(usr)
         context['old_tutos'] = Profile.objects.all_old_tutos_from_site_du_zero(profile)


Test patch: