diff --git a/ExpressAPI/src/routes/ApiRoutesManager.ts b/ExpressAPI/src/routes/ApiRoutesManager.ts
index 1508de4124baa104b7aac892da229685ecb9b998..1110c107f068052a254b5c3e1c55c681c2b9f461 100644
--- a/ExpressAPI/src/routes/ApiRoutesManager.ts
+++ b/ExpressAPI/src/routes/ApiRoutesManager.ts
@@ -6,6 +6,7 @@ import AssignmentRoutes from './AssignmentRoutes.js';
 import GitlabRoutes     from './GitlabRoutes.js';
 import ExerciseRoutes   from './ExerciseRoutes.js';
 import TagsRoutes       from './TagRoutes';
+import UserRoutes       from './UserRoutes';
 
 
 class AdminRoutesManager implements RoutesManager {
@@ -16,6 +17,7 @@ class AdminRoutesManager implements RoutesManager {
         AssignmentRoutes.registerOnBackend(backend);
         ExerciseRoutes.registerOnBackend(backend);
         TagsRoutes.registerOnBackend(backend);
+        UserRoutes.registerOnBackend(backend);
     }
 }
 
diff --git a/ExpressAPI/src/routes/UserRoutes.ts b/ExpressAPI/src/routes/UserRoutes.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4f729fe14f25c4ab8ff97ef118062737dbd6b06c
--- /dev/null
+++ b/ExpressAPI/src/routes/UserRoutes.ts
@@ -0,0 +1,58 @@
+import { Express }                 from 'express-serve-static-core';
+import express, { RequestHandler } from 'express';
+import { StatusCodes }             from 'http-status-codes';
+import RoutesManager               from '../express/RoutesManager.js';
+import SecurityMiddleware          from '../middlewares/SecurityMiddleware';
+import * as ExpressValidator       from 'express-validator';
+import ParamsValidatorMiddleware   from '../middlewares/ParamsValidatorMiddleware';
+import { Prisma, UserRole }        from '@prisma/client';
+import UserManager                 from '../managers/UserManager';
+
+
+class UserRoutes implements RoutesManager {
+    private readonly usersGetValidator: ExpressValidator.Schema = {
+        role: {
+            trim    : true,
+            notEmpty: false,
+            optional: true
+        }
+    };
+
+    registerOnBackend(backend: Express) {
+        backend.get('/users', SecurityMiddleware.check(true), ParamsValidatorMiddleware.validate(this.usersGetValidator), this.getUsers.bind(this) as RequestHandler);
+    }
+
+    private async getUsers(req: express.Request, res: express.Response) {
+
+        let roleFilter: Prisma.UserWhereInput | undefined = undefined;
+
+        if ( req.query.role ) {
+            if ( req.query.role === UserRole.ADMIN ) {
+                roleFilter = {
+                    role: UserRole.ADMIN
+                };
+            } else if ( req.query.role === UserRole.TEACHING_STAFF ) {
+                roleFilter = {
+                    OR: [ {
+                        role: UserRole.ADMIN
+                    }, {
+                        role: UserRole.TEACHING_STAFF
+                    } ]
+                };
+            } else if ( req.query.role === UserRole.STUDENT ) {
+                roleFilter = {
+                    role: UserRole.STUDENT
+                };
+            } else {
+                return req.session.sendResponse(res, StatusCodes.FORBIDDEN);
+            }
+        } else if ( !req.session.profile.isAdmin ) {
+            return req.session.sendResponse(res, StatusCodes.FORBIDDEN);
+        }
+
+        return req.session.sendResponse(res, StatusCodes.OK, await UserManager.getFiltered(roleFilter));
+    }
+}
+
+
+export default new UserRoutes();