diff --git a/user/graphql_inputs.py b/user/graphql_inputs.py
index ae62a968d4f1d4edfed3e32d492c5f2a023d3cf5..b0947f9fda5ac643c76ac86905500b7e2da545cc 100644
--- a/user/graphql_inputs.py
+++ b/user/graphql_inputs.py
@@ -1,9 +1,11 @@
 import graphene
 
+from common_lib.schema_types import GroupEnum
+
 
 class ChangeUserBase:
     user_id = graphene.UUID(required=True)
-    group = graphene.String(required=False, default_value=None)
+    group = graphene.Field(GroupEnum, required=False, default_value=None)
     active = graphene.Boolean(required=False, default_value=None)
 
 
@@ -20,7 +22,7 @@ class FilterUsersBase:
     first_name = graphene.String(required=False, default_value=None)
     last_name = graphene.String(required=False, default_value=None)
     active = graphene.Boolean(required=False, default_value=None)
-    group = graphene.List(graphene.String, required=False, default_value=None)
+    groups = graphene.List(GroupEnum, required=False, default_value=None)
     tags = graphene.List(graphene.String, required=False, default_value=None)
     limit = graphene.Int(required=False, default_value=None)
     skip = graphene.Int(required=False, default_value=None)
diff --git a/user/migrations/0006_auto_20240731_1426.py b/user/migrations/0006_auto_20240731_1426.py
new file mode 100644
index 0000000000000000000000000000000000000000..54f938822329de3767ca13cdcd6c3fd10e9b2cc9
--- /dev/null
+++ b/user/migrations/0006_auto_20240731_1426.py
@@ -0,0 +1,21 @@
+# Generated by Django 3.2.22 on 2024-07-31 14:26
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('user', '0005_alter_user_group'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='user',
+            name='is_staff',
+        ),
+        migrations.RemoveField(
+            model_name='user',
+            name='is_superuser',
+        ),
+    ]
diff --git a/user/models.py b/user/models.py
index 335df7f3a4a9cde22eb4cc11c0d9c4344185ed81..5b60232c58db2cb2a28c5dfe58caa5517a5516e3 100644
--- a/user/models.py
+++ b/user/models.py
@@ -43,22 +43,16 @@ class UserManager(BaseUserManager):
         return user
 
     def create_superuser(self, username, password, **extra_fields):
-        extra_fields.setdefault("is_staff", True)
-        extra_fields.setdefault("is_superuser", True)
         return self._create_user(
             username, password, User.AuthGroup.ADMIN, **extra_fields
         )
 
     def create_staffuser(self, username, password, **extra_fields):
-        extra_fields.setdefault("is_staff", True)
-        extra_fields.setdefault("is_superuser", False)
         return self._create_user(
             username, password, User.AuthGroup.INSTRUCTOR, **extra_fields
         )
 
     def create_user(self, username, password, **extra_fields):
-        extra_fields.setdefault("is_staff", False)
-        extra_fields.setdefault("is_superuser", False)
         return self._create_user(
             username, password, User.AuthGroup.TRAINEE, **extra_fields
         )
@@ -135,8 +129,6 @@ class User(AbstractBaseUser):
     group = models.IntegerField(
         choices=AuthGroup.choices(), default=AuthGroup.TRAINEE
     )
-    is_staff = models.BooleanField(default=False)
-    is_superuser = models.BooleanField(default=False)
     is_active = models.BooleanField(default=True)
     is_imported = models.BooleanField(default=False)
     teams = models.ManyToManyField(Team, through="UserInTeam")
diff --git a/user/schema/query.py b/user/schema/query.py
index 0ce6dfb0e6d4e94ce0121f293d0a02c75e3d960e..e8ab34ff3c2737e797068bc235655796a2684b5b 100644
--- a/user/schema/query.py
+++ b/user/schema/query.py
@@ -56,8 +56,8 @@ class Query(graphene.ObjectType):
                 last_name__icontains=filter_users_input.last_name
             )
 
-        if filter_users_input.group is not None:
-            users = users.filter(group__name__in=filter_users_input.group)
+        if filter_users_input.groups is not None:
+            users = users.filter(group__in=filter_users_input.groups)
 
         if filter_users_input.tags is not None:
             for tag in filter_users_input.tags:
diff --git a/user/schema/validators.py b/user/schema/validators.py
index 21b179969f4e8e694b0f007babfad1e6f7110693..c7a660acc44644d7b3f8a3a4338cc5da7c4bc89c 100644
--- a/user/schema/validators.py
+++ b/user/schema/validators.py
@@ -224,19 +224,11 @@ def execute_change_userdata(
         _validate_group_change(
             requester, changing_user, change_user_input.group
         )
-        changing_user.group = User.AuthGroup.from_str(change_user_input.group)
-        if change_user_input.group == "admin":
-            changing_user.is_superuser = True
-            changing_user.is_staff = True
-            changes.append(f"group=(old: {old_group}, new: admin)")
-        elif change_user_input.group == "instructor":
-            changing_user.is_staff = True
-            changing_user.is_superuser = False
-            changes.append(f"group=(old: {old_group}, new: instructor)")
-        elif change_user_input.group == "trainee":
-            changing_user.is_staff = False
-            changing_user.is_superuser = False
-            changes.append(f"group=(old: {old_group}, new: trainee)")
+        changing_user.group = change_user_input.group
+        changes.append(
+            f"group=(old: {User.AuthGroup(old_group).name},"
+            f" new: {User.AuthGroup(changing_user.group).name})"
+        )
     if change_user_input.active is not None:
         _validate_active_change(requester, changing_user, change_user_input)
         changing_user.is_active = change_user_input.active