Răsfoiți Sursa

Admin UI improvements

Jeremy Stretch 5 ani în urmă
părinte
comite
a62b98ac50

+ 30 - 4
netbox/users/admin.py

@@ -35,20 +35,42 @@ class UserConfigInline(admin.TabularInline):
     verbose_name = 'Preferences'
 
 
+class ObjectPermissionInline(admin.TabularInline):
+    model = AdminUser.object_permissions.through
+    fields = ['content_types', 'actions', 'attrs']
+    readonly_fields = fields
+    extra = 0
+    verbose_name = 'Permission'
+
+    def content_types(self, instance):
+        return ', '.join(instance.objectpermission.content_types.values_list('model', flat=True))
+
+    def actions(self, instance):
+        return ', '.join(instance.objectpermission.actions)
+
+    def attrs(self, instance):
+        return instance.objectpermission.attrs
+
+    def has_add_permission(self, request, obj):
+        # Don't allow the creation of new ObjectPermission assignments via this form
+        return False
+
+
 @admin.register(AdminUser)
 class UserAdmin(UserAdmin_):
     list_display = [
         'username', 'email', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active'
     ]
     fieldsets = (
-        (None, {'fields': ('username', 'password')}),
-        ('Personal info', {'fields': ('first_name', 'last_name', 'email')}),
+        (None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),
+        ('Groups', {'fields': ('groups',)}),
         ('Permissions', {
             'fields': ('is_active', 'is_staff', 'is_superuser'),
         }),
         ('Important dates', {'fields': ('last_login', 'date_joined')}),
     )
-    inlines = (UserConfigInline,)
+    inlines = [ObjectPermissionInline, UserConfigInline]
+    filter_horizontal = ('groups',)
 
 
 #
@@ -154,7 +176,7 @@ class ObjectPermissionAdmin(admin.ModelAdmin):
             'fields': ('content_types',)
         }),
         ('Assignment', {
-            'fields': (('groups', 'users'),)
+            'fields': ('groups', 'users')
         }),
         ('Actions', {
             'fields': (('can_view', 'can_add', 'can_change', 'can_delete'), 'actions')
@@ -163,10 +185,14 @@ class ObjectPermissionAdmin(admin.ModelAdmin):
             'fields': ('attrs',)
         }),
     )
+    filter_horizontal = ('content_types', 'groups', 'users')
     form = ObjectPermissionForm
     list_display = [
         'list_models', 'list_users', 'list_groups', 'actions', 'attrs',
     ]
+    list_filter = [
+        'groups', 'users'
+    ]
 
     def get_queryset(self, request):
         return super().get_queryset(request).prefetch_related('content_types', 'users', 'groups')

+ 2 - 0
netbox/users/migrations/0007_proxy_group_user.py

@@ -21,6 +21,7 @@ class Migration(migrations.Migration):
                 'proxy': True,
                 'indexes': [],
                 'constraints': [],
+                'verbose_name': 'Group',
             },
             bases=('auth.group',),
             managers=[
@@ -35,6 +36,7 @@ class Migration(migrations.Migration):
                 'proxy': True,
                 'indexes': [],
                 'constraints': [],
+                'verbose_name': 'User',
             },
             bases=('auth.user',),
             managers=[

+ 6 - 1
netbox/users/models.py

@@ -29,6 +29,7 @@ class AdminGroup(Group):
     Proxy contrib.auth.models.Group for the admin UI
     """
     class Meta:
+        verbose_name = 'Group'
         proxy = True
 
 
@@ -37,6 +38,7 @@ class AdminUser(User):
     Proxy contrib.auth.models.User for the admin UI
     """
     class Meta:
+        verbose_name = 'User'
         proxy = True
 
 
@@ -264,4 +266,7 @@ class ObjectPermission(models.Model):
         verbose_name = "Permission"
 
     def __str__(self):
-        return "Object permission"
+        return '{}: {}'.format(
+            ', '.join(self.content_types.values_list('model', flat=True)),
+            ', '.join(self.actions)
+        )