Refactor group detail and music views to use MemberFilterMixin for member access control

This commit is contained in:
Edgar P. Burkhart 2025-06-13 19:11:23 +02:00
parent 4e28311b1c
commit 19e6eb32c8
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
2 changed files with 21 additions and 8 deletions

View file

@ -4,13 +4,17 @@
<h1>
<i class="ri-group-2-fill"></i> {{ group.name }}
</h1>
<p>
<a href="{% url "group_update" pk=group.pk %}"><i class="ri-edit-line"></i> Modifier le groupe</a>
</p>
{% if group.owner == user %}
<p>
<a href="{% url "group_update" pk=group.pk %}"><i class="ri-edit-line"></i> Modifier le groupe</a>
</p>
{% endif %}
<h2>Membres</h2>
<p>
<a href="{% url "group_edit_members" pk=group.pk %}" role="button"><i class="ri-user-add-fill"></i> Modifier les membres</a>
</p>
{% if group.owner == user %}
<p>
<a href="{% url "group_edit_members" pk=group.pk %}" role="button"><i class="ri-user-add-fill"></i> Modifier les membres</a>
</p>
{% endif %}
<ul>
<li>
{{ group.owner }} ({{ owner_count }}) <i class="ri-vip-crown-fill"></i>

View file

@ -14,6 +14,15 @@ class OwnerFilterMixin(LoginRequiredMixin):
return super().get_queryset().filter(owner=self.request.user)
class MemberFilterMixin(LoginRequiredMixin):
def get_queryset(self):
return (
super()
.get_queryset()
.filter(Q(members=self.request.user) | Q(owner=self.request.user))
)
class GroupMixin:
model = models.Group
fields = ["name"]
@ -33,7 +42,7 @@ class GroupDeleteView(OwnerFilterMixin, GroupMixin, DeleteView):
success_url = "/"
class GroupDetailView(OwnerFilterMixin, GroupMixin, DetailView):
class GroupDetailView(MemberFilterMixin, GroupMixin, DetailView):
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
@ -53,7 +62,7 @@ class GroupAddMembersView(OwnerFilterMixin, GroupMixin, UpdateView):
form_class = forms.GroupAddMembersForm
class GroupAddMusicView(OwnerFilterMixin, SingleObjectMixin, View):
class GroupAddMusicView(MemberFilterMixin, SingleObjectMixin, View):
model = models.Group
def post(self, request, pk):