diff --git a/src/models/User.ts b/src/models/User.ts
index d9b5d06..d13bfec 100644
--- a/src/models/User.ts
+++ b/src/models/User.ts
@@ -54,22 +54,44 @@ class User {
   }
 
   public async setRoles(roles: (Role | RoleName | number | string)[]): Promise<void> {
-    const rolesToFetch = roles.map((role) => {
-      if (role instanceof Role) {
-        return role.id || role.name;
-      }
+    const inputRoleIds = new Set(
+      roles.filter((role) => {
+        role instanceof Role || typeof role === 'number'
+      }).map((role) => {
+        if (role instanceof Role) {
+          return role.id;
+        }
 
-      return role;
-    });
+        return role;
+      })
+    );
+
+    const inputRoleNames = new Set(
+      roles.filter((role) => {
+        typeof role === 'string'
+      }).map((role) => {
+        return role;
+      })
+    );
+
+    if (!inputRoleIds.size && !inputRoleNames.size) {
+      return;  // No roles to set
+    }
+
+    const query: Record<string, any> = {}
+    if (inputRoleIds.size) {
+      query['id'] = [...inputRoleIds];
+    }
+
+    if (inputRoleNames.size) {
+      query['name'] = [...inputRoleNames];
+    }
 
     const roleIds = new Set(
       (
         await $db.Role().findAll({
           where: {
-              [Op.or]: {
-              id: rolesToFetch,
-              name: rolesToFetch,
-            },
+            [Op.or]: query,
           },
         })
       ).map((role) => (role as any).id)