diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 2a58b277e..952f65ba0 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -372,19 +372,19 @@ ADMIN_MENU = Menu( link=f'users:user_list', link_text=_('Users'), auth_required=True, - permissions=[f'auth.view_user'], + permissions=[f'users.view_user'], buttons=( MenuItemButton( link=f'users:user_add', title='Add', icon_class='mdi mdi-plus-thick', - permissions=[f'auth.add_user'] + permissions=[f'users.add_user'] ), MenuItemButton( link=f'users:user_import', title='Import', icon_class='mdi mdi-upload', - permissions=[f'auth.add_user'] + permissions=[f'users.add_user'] ) ) ), @@ -392,19 +392,19 @@ ADMIN_MENU = Menu( link=f'users:group_list', link_text=_('Groups'), auth_required=True, - permissions=[f'auth.view_group'], + permissions=[f'users.view_group'], buttons=( MenuItemButton( link=f'users:group_add', title='Add', icon_class='mdi mdi-plus-thick', - permissions=[f'auth.add_group'] + permissions=[f'users.add_group'] ), MenuItemButton( link=f'users:group_import', title='Import', icon_class='mdi mdi-upload', - permissions=[f'auth.add_group'] + permissions=[f'users.add_group'] ) ) ), diff --git a/netbox/users/constants.py b/netbox/users/constants.py index f891d5573..e92623c82 100644 --- a/netbox/users/constants.py +++ b/netbox/users/constants.py @@ -3,8 +3,7 @@ from django.db.models import Q OBJECTPERMISSION_OBJECT_TYPES = Q( ~Q(app_label__in=['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users']) | - Q(app_label='auth', model__in=['group', 'user']) | - Q(app_label='users', model__in=['objectpermission', 'token']) + Q(app_label='users', model__in=['objectpermission', 'token', 'group', 'user']) ) CONSTRAINT_TOKEN_USER = '$user' diff --git a/netbox/users/migrations/0009_update_group_perms.py b/netbox/users/migrations/0009_update_group_perms.py new file mode 100644 index 000000000..f3b197492 --- /dev/null +++ b/netbox/users/migrations/0009_update_group_perms.py @@ -0,0 +1,53 @@ +# Generated by Django 5.0.5 on 2024-05-15 18:05 + +from django.db import migrations, models + + +def update_content_types(apps, schema_editor): + ObjectType = apps.get_model('core', 'ObjectType') + ObjectPermission = apps.get_model('users', 'ObjectPermission') + + auth_group_ct = ObjectType.objects.filter(app_label='auth', model='group').first() + users_group_ct = ObjectType.objects.filter(app_label='users', model='group').first() + if auth_group_ct and users_group_ct: + perms = ObjectPermission.objects.filter(object_types__in=[auth_group_ct]) + for perm in perms: + perm.object_types.remove(auth_group_ct) + perm.object_types.add(users_group_ct) + perm.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0008_flip_objectpermission_assignments'), + ] + + operations = [ + # Update ContentTypes + migrations.RunPython( + code=update_content_types, + reverse_code=migrations.RunPython.noop + ), + migrations.AlterField( + model_name='objectpermission', + name='object_types', + field=models.ManyToManyField( + limit_choices_to=models.Q( + models.Q( + models.Q( + ( + 'app_label__in', + ['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'], + ), + _negated=True, + ), + models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token', 'group', 'user'])), + _connector='OR', + ) + ), + related_name='object_permissions', + to='core.objecttype', + ), + ), + ]