Impersonation system implementation

This commit is contained in:
2026-08-03 21:33:31 -05:00
parent 87b0d46232
commit 95acc9b8d2
12 changed files with 545 additions and 8 deletions
+25 -2
View File
@@ -41,6 +41,9 @@
<a href="{% url 'library:browse' %}">
<i class="fas fa-compass"></i><span class="nav-text"> Browse</span>
</a>
<a href="{% url 'profiles:user_list' %}">
<i class="fas fa-users"></i><span class="nav-text"> Users</span>
</a>
</nav>
</div>
<main class="main-content">
@@ -49,6 +52,17 @@
{% if user.is_authenticated %}
<div class="user-bar">
{% if impersonating %}
<a class="impersonate-chip" href="{% url 'profiles:user_profile' impersonator.username %}"
title="Impersonator: {{ impersonator.username }}">
{% if impersonator_avatar_url %}
<img src="{{ impersonator_avatar_url }}" alt="">
{% else %}
<div class="default-avatar mini">{{ impersonator.username|first|upper }}</div>
{% endif %}
<span>Impersonator: {{ impersonator.username }}</span>
</a>
{% endif %}
<div class="user-avatar" onclick="toggleUserMenu()">
{% if user.userprofile.avatar %}
<img src="{{ user.userprofile.avatar_url }}" alt="Avatar">
@@ -60,7 +74,12 @@
<a href="{% url 'profiles:user_profile' request.user.username %}" class="user-edit">
<i class="fas fa-user-circle"></i> {{ user.username }}
</a>
<div class="user-info"></div>
<div class="user-info">
{% if impersonating %}
<i class="fas fa-mask"></i> acting from
<a href="{% url 'profiles:user_profile' impersonator.username %}"><strong>{{ impersonator.username }}</strong></a>
{% endif %}
</div>
<a href="{% url 'profiles:account' %}">
<i class="fas fa-user-cog"></i> Account Settings
</a>
@@ -70,7 +89,11 @@
<form method="post" action="{% url 'profiles:logout' %}" style="display: inline;">
{% csrf_token %}
<button type="submit" class="logout-button">
<i class="fas fa-sign-out-alt"></i> Logout
{% if impersonating %}
<i class="fas fa-undo-alt"></i> Stop impersonating
{% else %}
<i class="fas fa-sign-out-alt"></i> Logout
{% endif %}
</button>
</form>
</div>