From 31b699d5216bb0df1ff64b813db78eecd14bc53b Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@gmail.com>
Date: Sun, 4 Oct 2020 12:47:19 +1100
Subject: [PATCH] Hide "user permissions" view from the admin interface

---
 InvenTree/users/admin.py | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/InvenTree/users/admin.py b/InvenTree/users/admin.py
index c9546e0335..86d4bb1a86 100644
--- a/InvenTree/users/admin.py
+++ b/InvenTree/users/admin.py
@@ -8,6 +8,7 @@ from django import forms
 from django.contrib.auth import get_user_model
 from django.contrib.admin.widgets import FilteredSelectMultiple
 from django.contrib.auth.models import Group
+from django.contrib.auth.admin import UserAdmin
 
 from users.models import RuleSet
 
@@ -15,6 +16,10 @@ User = get_user_model()
 
 
 class RuleSetInline(admin.TabularInline):
+    """
+    Class for displaying inline RuleSet data in the Group admin page.
+    """
+
     model = RuleSet
     can_delete = False
     verbose_name = 'Ruleset'
@@ -27,6 +32,11 @@ class RuleSetInline(admin.TabularInline):
 
 
 class InvenTreeGroupAdminForm(forms.ModelForm):
+    """
+    Custom admin form for the Group model.
+
+    Adds the ability for editing user membership directly in the group admin page.
+    """
 
     class Meta:
         model = Group
@@ -54,8 +64,6 @@ class InvenTreeGroupAdminForm(forms.ModelForm):
 
     def save_m2m(self):
         # Add the users to the Group.
-        # Deprecated in Django 1.10: Direct assignment to a reverse foreign key
-        #                            or many-to-many relation
 
         self.instance.user_set.set(self.cleaned_data['users'])
 
@@ -100,5 +108,28 @@ class RoleGroupAdmin(admin.ModelAdmin):
         form.instance.save()  # form.instance is the parent
 
 
+class InvenTreeUserAdmin(UserAdmin):
+    """
+    Custom admin page for the User model.
+
+    Hides the "permissions" view as this is now handled
+    entirely by groups and RuleSets.
+
+    (And it's confusing!)
+    """
+
+    fieldsets = (
+        (None, {'fields': ('username', 'password')}),
+        (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
+        (_('Permissions'), {
+            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups'),
+        }),
+        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
+    )
+
+
 admin.site.unregister(Group)
 admin.site.register(Group, RoleGroupAdmin)
+
+admin.site.unregister(User)
+admin.site.register(User, InvenTreeUserAdmin)