add view users permission

This commit is contained in:
Laura Klünder 2024-12-12 22:29:14 +00:00
parent b32626c6ca
commit ddcac55ba1
4 changed files with 32 additions and 1 deletions

View file

@ -0,0 +1,23 @@
# Generated by Django 5.0.8 on 2024-12-12 22:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('control', '0014_userpermissions_sources_access'),
]
operations = [
migrations.AddField(
model_name='userpermissions',
name='view_users',
field=models.BooleanField(default=False, verbose_name='view user list in control panel'),
),
migrations.AlterField(
model_name='userpermissions',
name='max_changeset_changes',
field=models.PositiveSmallIntegerField(default=20, verbose_name='max changes per changeset'),
),
]

View file

@ -26,6 +26,7 @@ class UserPermissions(models.Model):
manage_map_updates = models.BooleanField(default=False, verbose_name=_('manage map updates'))
control_panel = models.BooleanField(default=False, verbose_name=_('can access control panel'))
view_users = models.BooleanField(default=False, verbose_name=_('view user list in control panel'))
grant_permissions = models.BooleanField(default=False, verbose_name=_('can grant control permissions'))
manage_announcements = models.BooleanField(default=False, verbose_name=_('manage announcements'))
grant_all_access = models.BooleanField(default=False, verbose_name=_('can grant access to everything'))

View file

@ -16,7 +16,9 @@
<nav>
<p>
<a href="{% url 'control.index' %}">{% trans 'Overview' %}</a> &middot;
{% if request.user_permissions.view_users %}
<a href="{% url 'control.users' %}">{% trans 'Users' %}</a> &middot;
{% endif %}
<a href="{% url 'control.access' %}">{% trans 'Access' %}</a> &middot;
{% if request.user_permissions.manage_announcements %}
<a href="{% url 'control.announcements' %}">{% trans 'Announcements' %}</a> &middot;

View file

@ -1,6 +1,7 @@
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
from django.db import IntegrityError, transaction
from django.db.models import Prefetch
from django.shortcuts import get_object_or_404, redirect, render
@ -21,6 +22,7 @@ class UserListView(ControlPanelMixin, ListView):
template_name = "control/users.html"
ordering = "id"
context_object_name = "users"
user_permission = "view_users"
def get_queryset(self):
qs = super().get_queryset()
@ -33,6 +35,9 @@ class UserListView(ControlPanelMixin, ListView):
@login_required(login_url='site.login')
@control_panel_view
def user_detail(request, user): # todo: make class based view
if not (request.user_permissions.view_users or user == request.user.pk):
raise PermissionDenied
qs = User.objects.select_related(
'permissions',
).prefetch_related(