add view users permission
This commit is contained in:
parent
b32626c6ca
commit
ddcac55ba1
4 changed files with 32 additions and 1 deletions
|
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -26,6 +26,7 @@ class UserPermissions(models.Model):
|
||||||
manage_map_updates = models.BooleanField(default=False, verbose_name=_('manage map updates'))
|
manage_map_updates = models.BooleanField(default=False, verbose_name=_('manage map updates'))
|
||||||
|
|
||||||
control_panel = models.BooleanField(default=False, verbose_name=_('can access control panel'))
|
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'))
|
grant_permissions = models.BooleanField(default=False, verbose_name=_('can grant control permissions'))
|
||||||
manage_announcements = models.BooleanField(default=False, verbose_name=_('manage announcements'))
|
manage_announcements = models.BooleanField(default=False, verbose_name=_('manage announcements'))
|
||||||
grant_all_access = models.BooleanField(default=False, verbose_name=_('can grant access to everything'))
|
grant_all_access = models.BooleanField(default=False, verbose_name=_('can grant access to everything'))
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
<nav>
|
<nav>
|
||||||
<p>
|
<p>
|
||||||
<a href="{% url 'control.index' %}">{% trans 'Overview' %}</a> ·
|
<a href="{% url 'control.index' %}">{% trans 'Overview' %}</a> ·
|
||||||
<a href="{% url 'control.users' %}">{% trans 'Users' %}</a> ·
|
{% if request.user_permissions.view_users %}
|
||||||
|
<a href="{% url 'control.users' %}">{% trans 'Users' %}</a> ·
|
||||||
|
{% endif %}
|
||||||
<a href="{% url 'control.access' %}">{% trans 'Access' %}</a> ·
|
<a href="{% url 'control.access' %}">{% trans 'Access' %}</a> ·
|
||||||
{% if request.user_permissions.manage_announcements %}
|
{% if request.user_permissions.manage_announcements %}
|
||||||
<a href="{% url 'control.announcements' %}">{% trans 'Announcements' %}</a> ·
|
<a href="{% url 'control.announcements' %}">{% trans 'Announcements' %}</a> ·
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.db import IntegrityError, transaction
|
from django.db import IntegrityError, transaction
|
||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
|
@ -21,6 +22,7 @@ class UserListView(ControlPanelMixin, ListView):
|
||||||
template_name = "control/users.html"
|
template_name = "control/users.html"
|
||||||
ordering = "id"
|
ordering = "id"
|
||||||
context_object_name = "users"
|
context_object_name = "users"
|
||||||
|
user_permission = "view_users"
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
|
@ -33,6 +35,9 @@ class UserListView(ControlPanelMixin, ListView):
|
||||||
@login_required(login_url='site.login')
|
@login_required(login_url='site.login')
|
||||||
@control_panel_view
|
@control_panel_view
|
||||||
def user_detail(request, user): # todo: make class based 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(
|
qs = User.objects.select_related(
|
||||||
'permissions',
|
'permissions',
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue