Ne montre la liste des participants qu'aux personnes autorisées

This commit is contained in:
Tom Hubrecht 2022-04-02 21:24:23 +02:00
parent d98d7da399
commit 6b34c052ea
3 changed files with 199 additions and 146 deletions

View file

@ -254,6 +254,9 @@ class User(AbstractUser):
# Pour les élections restreintes, il faut y être associé # Pour les élections restreintes, il faut y être associé
return election.restricted and (self.election == election) return election.restricted and (self.election == election)
def is_admin(self, election):
return election.created_by == self or self.is_staff
def get_prefix(self): def get_prefix(self):
return self.username.split("__")[0] return self.username.split("__")[0]

View file

@ -3,8 +3,8 @@
{% block custom_js %} {% block custom_js %}
{% if can_delete %} {% if can_delete %}
<script> <script>
_$('.modal-button').forEach(b => { _$('.modal-button').forEach(b => {
b.addEventListener('click', () => { b.addEventListener('click', () => {
const f = _$('form', _id(b.dataset.target), false); const f = _$('form', _id(b.dataset.target), false);
@ -46,14 +46,14 @@
}); });
}); });
</script> </script>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="level is-mobile"> <div class="level is-mobile">
{# Titre de l'élection #} {# Titre de l'élection #}
<div class="level-left is-flex-shrink-1 mr-3"> <div class="level-left is-flex-shrink-1 mr-3">
<h1 class="title">{{ election.name }}</h1> <h1 class="title">{{ election.name }}</h1>
@ -69,23 +69,23 @@
</a> </a>
</div> </div>
</div> </div>
</div> </div>
<div class="level"> <div class="level">
<div class="level-left"> <div class="level-left">
<h3 class="subtitle">{% trans "Liste des votant·e·s" %} ({{ voters|length }})</h3> <h3 class="subtitle">{% trans "Liste des votant·e·s" %} ({{ voters|length }})</h3>
</div> </div>
</div> </div>
<hr> <hr>
{# Précisions sur les modalités de vote #} {# Précisions sur les modalités de vote #}
{% if election.vote_restrictions %} {% if election.vote_restrictions %}
<div class="message is-warning"> <div class="message is-warning">
<div class="message-body content">{{ election.vote_restrictions|markdown|safe }}</div> <div class="message-body content">{{ election.vote_restrictions|markdown|safe }}</div>
</div> </div>
{% endif %} {% endif %}
<div class="message is-warning"> <div class="message is-warning">
<div class="message-body"> <div class="message-body">
{% if election.restricted %} {% if election.restricted %}
{% trans "Seules les personnes présentes sur cette liste peuvent voter, vous avez dû recevoir un mail avec vos identifiants de connexion." %} {% trans "Seules les personnes présentes sur cette liste peuvent voter, vous avez dû recevoir un mail avec vos identifiants de connexion." %}
@ -93,9 +93,10 @@
{% trans "Pour voter lors de cette élection, vous devez vous connecter à l'aide du CAS élève, d'autres restrictions peuvent s'appliquer et votre vote pourra être supprimé si vous n'avez pas le droit de vote." %} {% trans "Pour voter lors de cette élection, vous devez vous connecter à l'aide du CAS élève, d'autres restrictions peuvent s'appliquer et votre vote pourra être supprimé si vous n'avez pas le droit de vote." %}
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="columns is-centered"> {% if can_vote or is_admin %}
<div class="columns is-centered">
<div class="column is-narrow"> <div class="column is-narrow">
{% if can_delete %} {% if can_delete %}
{% include "forms/modal-form.html" with modal_id="delete" form=d_form %} {% include "forms/modal-form.html" with modal_id="delete" form=d_form %}
@ -109,7 +110,7 @@
{% if can_delete %} {% if can_delete %}
<th class="has-text-centered">{% trans "Supprimer" %}</th> <th class="has-text-centered">{% trans "Supprimer" %}</th>
{% endif %} {% endif %}
<tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -169,10 +170,57 @@
</tr> </tr>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</tbody>
</table> </table>
</div> </div>
</div> </div>
{% else %}
<div class="notification is-danger is-light has-text-centered">
<b>{% trans "Pour voir la liste des votant·e·s vous devez être connecté·e." %}</b>
{% if election.restricted %}
<br>
<span class="icon">
<i class="fas fa-info-circle"></i>
</span>
<i>{% trans "La connexion doit s'effectuer via les identifiants reçus par mail." %}</i>
{% endif %}
</div>
<div class="columns is-centered">
<div class="column is-half">
<div class="tile is-ancestor">
<div class="tile is-parent">
{% if election.restricted %}
<a class="tile is-child notification is-primary" href="{% url 'auth.election' election.pk %}?next={% url 'election.voters' election.pk %}">
<div class="subtitle has-text-centered mb-2">
<span class="icon-text">
<span class="icon has-text-white">
<i class="fas fa-unlock"></i>
</span>
<span class="ml-3">{% trans "Connexion par identifiants" %}</span>
</span>
</div>
</a>
{% else %}
<a class="tile is-child notification is-primary" href="{% url 'authens:login.cas' %}?next={% url 'election.voters' election.pk %}">
<div class="subtitle has-text-centered mb-2">
<span class="icon-text">
<span class="icon has-text-white">
<i class="fas fa-school"></i>
</span>
<span class="ml-3">{% trans "Connexion via CAS" %}</span>
</span>
</div>
</a>
{% endif %}
</div>
</div>
</div>
</div>
{% endif %}
{% endblock %} {% endblock %}

View file

@ -445,6 +445,8 @@ class ElectionVotersView(NotArchivedMixin, DetailView):
voters = list(election.voters.all()) voters = list(election.voters.all())
if user.is_authenticated: if user.is_authenticated:
context["can_vote"] = user.can_vote(self.request, context["election"])
context["is_admin"] = user.is_admin(election)
can_delete = ( can_delete = (
election.created_by == user election.created_by == user
and election.end_date < timezone.now() and election.end_date < timezone.now()