Răsfoiți Sursa

16138 fix user/group permissions (#16152)

* 16138 change view perms

* 16138 add migration of group perms

* 16138 update users and groups in perm selection
Arthur Hanson 1 an în urmă
părinte
comite
d060b380c9

+ 6 - 6
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']
                         )
                     )
                 ),

+ 1 - 2
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'

+ 53 - 0
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',
+            ),
+        ),
+    ]