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

Rename content_types to object_types

This commit is contained in:
Jeremy Stretch
2020-06-03 09:27:20 -04:00
parent 19407ba3bc
commit ddcd172af1
7 changed files with 51 additions and 51 deletions

View File

@ -26,14 +26,14 @@ class ObjectPermissionBackend(ModelBackend):
object_permissions = ObjectPermission.objects.filter( object_permissions = ObjectPermission.objects.filter(
Q(users=user_obj) | Q(users=user_obj) |
Q(groups__user=user_obj) Q(groups__user=user_obj)
).prefetch_related('content_types') ).prefetch_related('object_types')
# Create a dictionary mapping permissions to their attributes # Create a dictionary mapping permissions to their attributes
perms = dict() perms = dict()
for obj_perm in object_permissions: for obj_perm in object_permissions:
for content_type in obj_perm.content_types.all(): for object_type in obj_perm.object_types.all():
for action in obj_perm.actions: for action in obj_perm.actions:
perm_name = f"{content_type.app_label}.{action}_{content_type.model}" perm_name = f"{object_type.app_label}.{action}_{object_type.model}"
if perm_name in perms: if perm_name in perms:
perms[perm_name].append(obj_perm.attrs) perms[perm_name].append(obj_perm.attrs)
else: else:
@ -113,12 +113,12 @@ class RemoteUserBackend(_RemoteUserBackend):
permissions_list = [] permissions_list = []
for permission_name, attrs in settings.REMOTE_AUTH_DEFAULT_PERMISSIONS.items(): for permission_name, attrs in settings.REMOTE_AUTH_DEFAULT_PERMISSIONS.items():
try: try:
content_type, action = resolve_permission_ct(permission_name) object_type, action = resolve_permission_ct(permission_name)
# TODO: Merge multiple actions into a single ObjectPermission per content type # TODO: Merge multiple actions into a single ObjectPermission per content type
obj_perm = ObjectPermission(actions=[action], attrs=attrs) obj_perm = ObjectPermission(actions=[action], attrs=attrs)
obj_perm.save() obj_perm.save()
obj_perm.users.add(user) obj_perm.users.add(user)
obj_perm.content_types.add(content_type) obj_perm.object_types.add(object_type)
permissions_list.append(permission_name) permissions_list.append(permission_name)
except ValueError: except ValueError:
logging.error( logging.error(

View File

@ -207,7 +207,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Retrieve permitted object # Retrieve permitted object
response = self.client.get(self.prefixes[0].get_absolute_url()) response = self.client.get(self.prefixes[0].get_absolute_url())
@ -231,7 +231,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Retrieve all objects. Only permitted objects should be returned. # Retrieve all objects. Only permitted objects should be returned.
response = self.client.get(reverse('ipam:prefix_list')) response = self.client.get(reverse('ipam:prefix_list'))
@ -265,7 +265,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to create a non-permitted object # Attempt to create a non-permitted object
request = { request = {
@ -312,7 +312,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to edit a non-permitted object # Attempt to edit a non-permitted object
request = { request = {
@ -355,7 +355,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Delete permitted object # Delete permitted object
request = { request = {
@ -403,7 +403,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to create non-permitted objects # Attempt to create non-permitted objects
request = { request = {
@ -452,7 +452,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to edit non-permitted objects # Attempt to edit non-permitted objects
request = { request = {
@ -496,7 +496,7 @@ class ObjectPermissionViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to delete non-permitted object # Attempt to delete non-permitted object
request = { request = {
@ -567,7 +567,7 @@ class ObjectPermissionAPIViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Retrieve permitted object # Retrieve permitted object
url = reverse('ipam-api:prefix-detail', kwargs={'pk': self.prefixes[0].pk}) url = reverse('ipam-api:prefix-detail', kwargs={'pk': self.prefixes[0].pk})
@ -594,7 +594,7 @@ class ObjectPermissionAPIViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Retrieve all objects. Only permitted objects should be returned. # Retrieve all objects. Only permitted objects should be returned.
response = self.client.get(url, **self.header) response = self.client.get(url, **self.header)
@ -621,7 +621,7 @@ class ObjectPermissionAPIViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to create a non-permitted object # Attempt to create a non-permitted object
response = self.client.post(url, data, format='json', **self.header) response = self.client.post(url, data, format='json', **self.header)
@ -650,7 +650,7 @@ class ObjectPermissionAPIViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to edit a non-permitted object # Attempt to edit a non-permitted object
data = {'site': self.sites[0].pk} data = {'site': self.sites[0].pk}
@ -685,7 +685,7 @@ class ObjectPermissionAPIViewTestCase(TestCase):
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(Prefix)) obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
# Attempt to delete a non-permitted object # Attempt to delete a non-permitted object
url = reverse('ipam-api:prefix-detail', kwargs={'pk': self.prefixes[3].pk}) url = reverse('ipam-api:prefix-detail', kwargs={'pk': self.prefixes[3].pk})

View File

@ -37,13 +37,13 @@ class UserConfigInline(admin.TabularInline):
class ObjectPermissionInline(admin.TabularInline): class ObjectPermissionInline(admin.TabularInline):
model = AdminUser.object_permissions.through model = AdminUser.object_permissions.through
fields = ['content_types', 'actions', 'attrs'] fields = ['object_types', 'actions', 'attrs']
readonly_fields = fields readonly_fields = fields
extra = 0 extra = 0
verbose_name = 'Permission' verbose_name = 'Permission'
def content_types(self, instance): def object_types(self, instance):
return ', '.join(instance.objectpermission.content_types.values_list('model', flat=True)) return ', '.join(instance.objectpermission.object_types.values_list('model', flat=True))
def actions(self, instance): def actions(self, instance):
return ', '.join(instance.objectpermission.actions) return ', '.join(instance.objectpermission.actions)
@ -127,8 +127,8 @@ class ObjectPermissionForm(forms.ModelForm):
self.fields['actions'].required = False self.fields['actions'].required = False
# Format ContentType choices # Format ContentType choices
order_content_types(self.fields['content_types']) order_content_types(self.fields['object_types'])
self.fields['content_types'].choices.insert(0, ('', '---------')) self.fields['object_types'].choices.insert(0, ('', '---------'))
# Order group and user fields # Order group and user fields
self.fields['groups'].queryset = self.fields['groups'].queryset.order_by('name') self.fields['groups'].queryset = self.fields['groups'].queryset.order_by('name')
@ -142,7 +142,7 @@ class ObjectPermissionForm(forms.ModelForm):
self.instance.actions.remove(action) self.instance.actions.remove(action)
def clean(self): def clean(self):
content_types = self.cleaned_data['content_types'] object_types = self.cleaned_data['object_types']
attrs = self.cleaned_data['attrs'] attrs = self.cleaned_data['attrs']
# Append any of the selected CRUD checkboxes to the actions list # Append any of the selected CRUD checkboxes to the actions list
@ -159,7 +159,7 @@ class ObjectPermissionForm(forms.ModelForm):
# Validate the specified model attributes by attempting to execute a query. We don't care whether the query # Validate the specified model attributes by attempting to execute a query. We don't care whether the query
# returns anything; we just want to make sure the specified attributes are valid. # returns anything; we just want to make sure the specified attributes are valid.
if attrs: if attrs:
for ct in content_types: for ct in object_types:
model = ct.model_class() model = ct.model_class()
try: try:
model.objects.filter(**attrs).exists() model.objects.filter(**attrs).exists()
@ -173,7 +173,7 @@ class ObjectPermissionForm(forms.ModelForm):
class ObjectPermissionAdmin(admin.ModelAdmin): class ObjectPermissionAdmin(admin.ModelAdmin):
fieldsets = ( fieldsets = (
('Objects', { ('Objects', {
'fields': ('content_types',) 'fields': ('object_types',)
}), }),
('Assignment', { ('Assignment', {
'fields': ('groups', 'users') 'fields': ('groups', 'users')
@ -185,7 +185,7 @@ class ObjectPermissionAdmin(admin.ModelAdmin):
'fields': ('attrs',) 'fields': ('attrs',)
}), }),
) )
filter_horizontal = ('content_types', 'groups', 'users') filter_horizontal = ('object_types', 'groups', 'users')
form = ObjectPermissionForm form = ObjectPermissionForm
list_display = [ list_display = [
'list_models', 'list_users', 'list_groups', 'actions', 'attrs', 'list_models', 'list_users', 'list_groups', 'actions', 'attrs',
@ -195,10 +195,10 @@ class ObjectPermissionAdmin(admin.ModelAdmin):
] ]
def get_queryset(self, request): def get_queryset(self, request):
return super().get_queryset(request).prefetch_related('content_types', 'users', 'groups') return super().get_queryset(request).prefetch_related('object_types', 'users', 'groups')
def list_models(self, obj): def list_models(self, obj):
return ', '.join([f"{ct}" for ct in obj.content_types.all()]) return ', '.join([f"{ct}" for ct in obj.object_types.all()])
list_models.short_description = 'Models' list_models.short_description = 'Models'
def list_users(self, obj): def list_users(self, obj):

View File

@ -22,7 +22,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
('attrs', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)), ('attrs', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)),
('actions', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)), ('actions', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)),
('content_types', models.ManyToManyField(limit_choices_to={'app_label__in': ['circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'virtualization']}, related_name='object_permissions', to='contenttypes.ContentType')), ('object_types', models.ManyToManyField(limit_choices_to={'app_label__in': ['circuits', 'dcim', 'extras', 'ipam', 'secrets', 'tenancy', 'virtualization']}, related_name='object_permissions', to='contenttypes.ContentType')),
('groups', models.ManyToManyField(blank=True, related_name='object_permissions', to='auth.Group')), ('groups', models.ManyToManyField(blank=True, related_name='object_permissions', to='auth.Group')),
('users', models.ManyToManyField(blank=True, related_name='object_permissions', to=settings.AUTH_USER_MODEL)), ('users', models.ManyToManyField(blank=True, related_name='object_permissions', to=settings.AUTH_USER_MODEL)),
], ],

View File

@ -26,7 +26,7 @@ def replicate_permissions(apps, schema_editor):
if perm.group_set.exists() or perm.user_set.exists(): if perm.group_set.exists() or perm.user_set.exists():
obj_perm = ObjectPermission(actions=[action]) obj_perm = ObjectPermission(actions=[action])
obj_perm.save() obj_perm.save()
obj_perm.content_types.add(perm.content_type) obj_perm.object_types.add(perm.content_type)
if perm.group_set.exists(): if perm.group_set.exists():
obj_perm.groups.add(*list(perm.group_set.all())) obj_perm.groups.add(*list(perm.group_set.all()))
if perm.user_set.exists(): if perm.user_set.exists():

View File

@ -243,7 +243,7 @@ class ObjectPermission(models.Model):
blank=True, blank=True,
related_name='object_permissions' related_name='object_permissions'
) )
content_types = models.ManyToManyField( object_types = models.ManyToManyField(
to=ContentType, to=ContentType,
limit_choices_to={ limit_choices_to={
'app_label__in': [ 'app_label__in': [
@ -267,6 +267,6 @@ class ObjectPermission(models.Model):
def __str__(self): def __str__(self):
return '{}: {}'.format( return '{}: {}'.format(
', '.join(self.content_types.values_list('model', flat=True)), ', '.join(self.object_types.values_list('model', flat=True)),
', '.join(self.actions) ', '.join(self.actions)
) )

View File

@ -37,7 +37,7 @@ class TestCase(_TestCase):
obj_perm = ObjectPermission(actions=[action]) obj_perm = ObjectPermission(actions=[action])
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ct) obj_perm.object_types.add(ct)
# #
# Convenience methods # Convenience methods
@ -169,7 +169,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(instance.get_absolute_url()), 200) self.assertHttpStatus(self.client.get(instance.get_absolute_url()), 200)
@ -185,7 +185,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET to permitted object # Try GET to permitted object
self.assertHttpStatus(self.client.get(instance1.get_absolute_url()), 200) self.assertHttpStatus(self.client.get(instance1.get_absolute_url()), 200)
@ -225,7 +225,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(self._get_url('add')), 200) self.assertHttpStatus(self.client.get(self._get_url('add')), 200)
@ -250,7 +250,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with object-level permission # Try GET with object-level permission
self.assertHttpStatus(self.client.get(self._get_url('add')), 200) self.assertHttpStatus(self.client.get(self._get_url('add')), 200)
@ -309,7 +309,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(self._get_url('edit', instance)), 200) self.assertHttpStatus(self.client.get(self._get_url('edit', instance)), 200)
@ -333,7 +333,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with a permitted object # Try GET with a permitted object
self.assertHttpStatus(self.client.get(self._get_url('edit', instance1)), 200) self.assertHttpStatus(self.client.get(self._get_url('edit', instance1)), 200)
@ -386,7 +386,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(self._get_url('delete', instance)), 200) self.assertHttpStatus(self.client.get(self._get_url('delete', instance)), 200)
@ -411,7 +411,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with a permitted object # Try GET with a permitted object
self.assertHttpStatus(self.client.get(self._get_url('delete', instance1)), 200) self.assertHttpStatus(self.client.get(self._get_url('delete', instance1)), 200)
@ -463,7 +463,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(self._get_url('list')), 200) self.assertHttpStatus(self.client.get(self._get_url('list')), 200)
@ -485,7 +485,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with object-level permission # Try GET with object-level permission
self.assertHttpStatus(self.client.get(self._get_url('list')), 200) self.assertHttpStatus(self.client.get(self._get_url('list')), 200)
@ -515,7 +515,7 @@ class ViewTestCases:
obj_perm = ObjectPermission(actions=['add']) obj_perm = ObjectPermission(actions=['add'])
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
response = self.client.post(**request) response = self.client.post(**request)
self.assertHttpStatus(response, 302) self.assertHttpStatus(response, 302)
@ -561,7 +561,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try GET with model-level permission # Try GET with model-level permission
self.assertHttpStatus(self.client.get(self._get_url('import')), 200) self.assertHttpStatus(self.client.get(self._get_url('import')), 200)
@ -584,7 +584,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Test import with object-level permission # Test import with object-level permission
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200) self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200)
@ -631,7 +631,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try POST with model-level permission # Try POST with model-level permission
self.assertHttpStatus(self.client.post(self._get_url('bulk_edit'), data), 302) self.assertHttpStatus(self.client.post(self._get_url('bulk_edit'), data), 302)
@ -656,7 +656,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try POST with model-level permission # Try POST with model-level permission
self.assertHttpStatus(self.client.post(self._get_url('bulk_edit'), data), 302) self.assertHttpStatus(self.client.post(self._get_url('bulk_edit'), data), 302)
@ -701,7 +701,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try POST with model-level permission # Try POST with model-level permission
self.assertHttpStatus(self.client.post(self._get_url('bulk_delete'), data), 302) self.assertHttpStatus(self.client.post(self._get_url('bulk_delete'), data), 302)
@ -723,7 +723,7 @@ class ViewTestCases:
) )
obj_perm.save() obj_perm.save()
obj_perm.users.add(self.user) obj_perm.users.add(self.user)
obj_perm.content_types.add(ContentType.objects.get_for_model(self.model)) obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
# Try POST with object-level permission # Try POST with object-level permission
self.assertHttpStatus(self.client.post(self._get_url('bulk_delete'), data), 302) self.assertHttpStatus(self.client.post(self._get_url('bulk_delete'), data), 302)