1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fix up ObjectPermission content type assignment

This commit is contained in:
Jeremy Stretch
2020-05-28 14:20:18 -04:00
parent 65bd3fbddb
commit bdfc0364d5
3 changed files with 35 additions and 1 deletions

View File

@@ -3,8 +3,14 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as UserAdmin_
from django.contrib.auth.models import Group, User
from extras.admin import order_content_types
from .models import ObjectPermission, Token, UserConfig
#
# Users & groups
#
# Unregister the built-in GroupAdmin and UserAdmin classes so that we can use our custom admin classes below
admin.site.unregister(Group)
admin.site.unregister(User)
@@ -44,6 +50,10 @@ class UserAdmin(UserAdmin_):
inlines = (UserConfigInline,)
#
# REST API tokens
#
class TokenAdminForm(forms.ModelForm):
key = forms.CharField(
required=False,
@@ -65,8 +75,27 @@ class TokenAdmin(admin.ModelAdmin):
]
#
# Permissions
#
class ObjectPermissionForm(forms.ModelForm):
class Meta:
model = ObjectPermission
exclude = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Format ContentType choices
order_content_types(self.fields['model'])
self.fields['model'].choices.insert(0, ('', '---------'))
@admin.register(ObjectPermission)
class ObjectPermissionAdmin(admin.ModelAdmin):
form = ObjectPermissionForm
list_display = [
'model', 'can_view', 'can_add', 'can_change', 'can_delete'
]

View File

@@ -26,7 +26,7 @@ class Migration(migrations.Migration):
('can_change', models.BooleanField(default=False)),
('can_delete', models.BooleanField(default=False)),
('groups', models.ManyToManyField(blank=True, related_name='object_permissions', to='auth.Group')),
('model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
('model', models.ForeignKey(limit_choices_to={'app_label__in': ['circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'virtualization']}, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
('users', models.ManyToManyField(blank=True, related_name='object_permissions', to=settings.AUTH_USER_MODEL)),
],
options={

View File

@@ -214,6 +214,11 @@ class ObjectPermission(models.Model):
)
model = models.ForeignKey(
to=ContentType,
limit_choices_to={
'app_label__in': [
'circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'virtualization',
],
},
on_delete=models.CASCADE
)
attrs = JSONField(