Если пользователь является сотрудником, он увидит список пользователей и данные их профиля, а также данные своего профиля. Если нет, он увидит только данные своего профиля.
models.py
class UserProfile(AbstractUser):
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse("user_details", kwargs={"username":self.username})
views.py
def usersList(request):
"""
The list of all users
"""
if request.user.is_superuser:
users_list = UserProfile.objects.all()
elif request.user.is_staff:
users_list = UserProfile.objects.filter(is_staff=False)
else:
raise PermissionDenied
template = 'usermanager/users_list.html'
context = {
'users': users_list,
}
return render(request, template, context)
def userDetails(request, username):
"""
User details
"""
user_details = get_object_or_404(UserProfile, username=username)
template = 'usermanager/user_details.html'
context = {
'user_details': user_details,
}
return render(request, template, context)
urls.py
path('user-list/', views.usersList, name='users'),
path('<username>/', views.userDetails, name='user_details'),
users_list. html
{% for user in users %}
<h1>{{ user.username }}</h1>
<p>Name: {{ user.first_name }}</p>
<p>Surname: {{ user.last_name }}</p>
<p>Email: {{ user.email }}</p>
{% if request.user.is_superuser %}
{% if user.is_staff %}
<button class="btn btn-warning">Staff</button>
{% else %}
<button class="btn btn-primary">User</button>
{% endif %}
{% endif %}
<a class="btn btn-danger" href="{% url 'user_details' username=user.username %}">Details</a>
<hr>
{% endfor %}
user_details. html
{% if request.user == user %}
<h1>Your profile</h1>
{% else %}
<h1>Profile of {{ user.username }}</h1>
{% endif %}
<hr>
<div class="container">
<p>Name: {{ user.first_name }}</p>
<p>Surname: {{ user.last_name }}</p>
<p>Email: {{ user.email }}</p>
{% if request.user.is_superuser %}
{% if user.is_staff %}
<button class="btn btn-warning">Staff</button>
{% else %}
<button class="btn btn-primary">User</button>
{% endif %}
{% endif %}
<p>Joined: {{ user.date_joined }}</p>
<p>Last login: {{ user.last_login }}</p>
{% if user.is_active %}
<button class="btn btn-success">Active</button>
{% else %}
<button class="btn btn-secondary">Inactive</button>
{% endif %}
</div>
Я правильно вижу список всех пользователей. Bob является одним из моих пользователей, если я нажимаю на его данные, я вижу свой личный профиль. Это происходит для всех деталей пользователей, я всегда вижу свой профиль. Я вошел как суперпользователь.
В чем я не прав?