diff --git a/documentcloud/templates/admin/dropdown_filter.html b/documentcloud/templates/admin/dropdown_filter.html
new file mode 100644
index 00000000..406ffa3b
--- /dev/null
+++ b/documentcloud/templates/admin/dropdown_filter.html
@@ -0,0 +1,27 @@
+{% load i18n %}
+
+
+
{% blocktrans with title as filter_title %} By {{ filter_title }} {% endblocktrans %}
+
+{% if choices|slice:"1:" %}
+ -
+
+
+{% else %}
+
+ {% for choice in choices %}
+ -
+ {{ choice.display }}
+ {% endfor %}
+
+{% endif %}
+
+
diff --git a/documentcloud/users/admin.py b/documentcloud/users/admin.py
index a92fb0cf..40cfe9c2 100644
--- a/documentcloud/users/admin.py
+++ b/documentcloud/users/admin.py
@@ -1,6 +1,9 @@
# Django
from django.conf import settings
from django.contrib import admin
+from django.contrib.admin.filters import SimpleListFilter
+from django.contrib.auth.models import Permission
+from django.db.models.query_utils import Q
from django.http.response import HttpResponse
from django.urls.conf import re_path
@@ -14,10 +17,30 @@
from documentcloud.users.models import User
+class PermissionFilter(SimpleListFilter):
+ """Filter for users by permission"""
+
+ title = "Permission"
+ parameter_name = "permission"
+ template = "admin/dropdown_filter.html"
+
+ def lookups(self, request, model_admin):
+ return Permission.objects.values_list("pk", "name")
+
+ def queryset(self, request, queryset):
+ return queryset.filter(
+ Q(user_permissions=self.value())
+ | Q(groups__permissions=self.value())
+ | Q(is_superuser=True)
+ ).distinct()
+
+
@admin.register(User)
class UserAdmin(SAUserAdmin):
"""User Admin"""
+ list_filter = SAUserAdmin.list_filter + (PermissionFilter,)
+
def get_urls(self):
"""Add custom URLs here"""
urls = super().get_urls()