diff --git a/src/index.ts b/src/index.ts
index d4d4e03a90526f68b863acfb68616cf0268762d4..39b7a6ce455ec083a2e0f35ceb0c1d609ee5b056 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,6 +5,7 @@ import bodyParser from "body-parser";
 import expressSession from "express-session";
 import authRoute from "./routes/auth";
 import newsRoute from "./routes/news";
+import usersRoute from "./routes/user";
 
 mongoose
   .connect("mongodb://localhost:27017/bodysch", {
@@ -46,6 +47,10 @@ authRoute(app);
 // Register routes
 newsRoute(app);
 
+usersRoute(app);
+
+
+
 app.use((err: any, req: Request, res: Response, next: NextFunction) => {
   res.status(500).send("Houston, we have a problem!");
 
diff --git a/src/middlewares/auth/complete.ts b/src/middlewares/auth/complete.ts
index 2f51c83720611deeaed408fdcf3c4abd7f1a7d74..988565680015af76bfebe882c9012ea1c9a9b6d3 100644
--- a/src/middlewares/auth/complete.ts
+++ b/src/middlewares/auth/complete.ts
@@ -15,7 +15,7 @@ const complete = () => async (req: Request, res: Response) => {
         await axios.get(`https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}`)
             .then( (response) =>  {
                 req.session!.user = {
-                    id: String(response.data.basic),
+                    id: String(response.data.internal_id),
                     email: String(response.data.mail),
                     name: `${response.data.sn} ${response.data.givenName}` ,
                     token,
diff --git a/src/middlewares/user/addUser.ts b/src/middlewares/user/addUser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..672116b6950fe47dd759cdba029458cb99954174
--- /dev/null
+++ b/src/middlewares/user/addUser.ts
@@ -0,0 +1,29 @@
+import { Request, Response, NextFunction } from 'express';
+import Profile, { Role } from "../../models/ProfileSchema";
+
+const addUser = () => (req: Request, res: Response, next: NextFunction) => {
+  const profile = new Profile();
+  
+  const filds = ['studentCardNumber', 'roomNumber', 'picture'];
+  filds.forEach(fild => {
+    const value = req.body[fild]
+    if(value)
+      profile.set(fild, value);
+  });
+  
+  profile.external_id = req.session!.user!.id;
+  profile.role = Role.User;
+  
+  profile.save(err => {
+    if (err) {
+      res.status(400);
+    }
+    else {
+      res.status(201);
+      res.data = {profile};
+    }
+    res.json(profile);
+  });
+}
+
+export default addUser;
\ No newline at end of file
diff --git a/src/middlewares/user/addWarning.ts b/src/middlewares/user/addWarning.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e7eae54ef0692fb641e551038535e48883ac95e7
--- /dev/null
+++ b/src/middlewares/user/addWarning.ts
@@ -0,0 +1,7 @@
+import {Request, Response, NextFunction} from 'express';
+
+const addWarning = () => (req: Request, res: Response, next: NextFunction) =>{
+    res.send("Add warning");
+}
+
+export default addWarning;
\ No newline at end of file
diff --git a/src/middlewares/user/deleteUser.ts b/src/middlewares/user/deleteUser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e31308bd73e06b42318ae2e83295efc40de6785
--- /dev/null
+++ b/src/middlewares/user/deleteUser.ts
@@ -0,0 +1,16 @@
+import { Request, Response, NextFunction } from 'express';
+import Profile from '../../models/ProfileSchema';
+
+const deletUser = () => (req: Request, res: Response, next: NextFunction) => {
+  Profile.findByIdAndDelete(req.params.id, (error) => {
+    if (error) {
+      res.status(400);
+
+    } else {
+      res.status(204);
+    }
+    res.json({});
+  });
+}
+
+export default deletUser;
\ No newline at end of file
diff --git a/src/middlewares/user/deleteWarning.ts b/src/middlewares/user/deleteWarning.ts
new file mode 100644
index 0000000000000000000000000000000000000000..90ca8a2d9344ee0907f7de52b071f2e9f3341a73
--- /dev/null
+++ b/src/middlewares/user/deleteWarning.ts
@@ -0,0 +1,7 @@
+import {Request, Response, NextFunction} from 'express';
+
+const deleteWarning = () => (req: Request, res: Response, next: NextFunction) =>{
+    res.send("Delete warning");
+}
+
+export default deleteWarning;
\ No newline at end of file
diff --git a/src/middlewares/user/getUser.ts b/src/middlewares/user/getUser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8988a784ee70c13965f0bf5028e47482c3122864
--- /dev/null
+++ b/src/middlewares/user/getUser.ts
@@ -0,0 +1,17 @@
+import {Request, Response, NextFunction} from 'express';
+import Profile from '../../models/ProfileSchema';
+
+const getUser = () => (req: Request, res: Response, next: NextFunction) =>{
+    Profile.findById(req.params.id, (error, profile) => {
+        if (!error) {
+          res.status(200);
+          res.data = {profile};
+        } else {
+          console.warn(error);
+          res.status(400);
+        }
+        res.json(profile);
+      });
+}
+
+export default getUser;
\ No newline at end of file
diff --git a/src/middlewares/user/getUsersList.ts b/src/middlewares/user/getUsersList.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e05b7527bffa38be94e98e601425289d4340d13d
--- /dev/null
+++ b/src/middlewares/user/getUsersList.ts
@@ -0,0 +1,17 @@
+import {Request, Response, NextFunction} from 'express';
+import Profile from '../../models/ProfileSchema';
+
+const getUsersList = () => (req: Request, res: Response, next: NextFunction) =>{
+    Profile.find({}, (err, profiles) =>{
+        if(err) {
+            res.status(400);
+        }
+        else{
+            res.status(200);
+            res.data = {profiles}
+        }
+        res.json(profiles);        
+    })
+}
+
+export default getUsersList;
\ No newline at end of file
diff --git a/src/middlewares/user/getWarning.ts b/src/middlewares/user/getWarning.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d97d5d2523185bd35c6f3210608d79dfcd2faea5
--- /dev/null
+++ b/src/middlewares/user/getWarning.ts
@@ -0,0 +1,7 @@
+import {Request, Response, NextFunction} from 'express';
+
+const getWarning = () => (req: Request, res: Response, next: NextFunction) =>{
+    res.send("Get warning");
+}
+
+export default getWarning;
\ No newline at end of file
diff --git a/src/middlewares/user/getWarningsList.ts b/src/middlewares/user/getWarningsList.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c4cff031cc1d7cb1f3e435812a766f96cb296a4c
--- /dev/null
+++ b/src/middlewares/user/getWarningsList.ts
@@ -0,0 +1,7 @@
+import {Request, Response, NextFunction} from 'express';
+
+const getWarningsList = () => (req: Request, res: Response, next: NextFunction) =>{
+    res.send("Get warnings");
+}
+
+export default getWarningsList;
\ No newline at end of file
diff --git a/src/middlewares/user/updateUser.ts b/src/middlewares/user/updateUser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..836bade9d3785da8992c01f373878dc9f2f97bde
--- /dev/null
+++ b/src/middlewares/user/updateUser.ts
@@ -0,0 +1,33 @@
+import {Request, Response, NextFunction} from 'express';
+import Profile from '../../models/ProfileSchema';
+
+const updateUser = () => (req: Request, res: Response, next: NextFunction) => {
+    const validFilds = ['studentCardNumber', 'roomNumber', 'picture'];
+    Profile.findOne(
+        {_id : req.params.id},
+        (error, profile) => {
+          res.status(400);
+          if (error) {
+            res.status(400);
+              
+          } 
+          else {
+            if(profile){
+
+              validFilds.forEach(fild => {
+                const value = req.body[fild]
+                if(value)
+                  profile.set(fild, value);
+              });
+
+              res.status(200);
+              profile.save();
+              res.data = {profile};
+              }
+            }
+          res.json(profile);
+        }
+    );
+}
+
+export default updateUser;
\ No newline at end of file
diff --git a/src/middlewares/user/updateWarning.ts b/src/middlewares/user/updateWarning.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6ff3f0bed90016310472a41c0505e4a729278cc4
--- /dev/null
+++ b/src/middlewares/user/updateWarning.ts
@@ -0,0 +1,7 @@
+import {Request, Response, NextFunction} from 'express';
+
+const updateWarning = () => (req: Request, res: Response, next: NextFunction) =>{
+    res.send("Update warning");
+}
+
+export default updateWarning;
\ No newline at end of file
diff --git a/src/models/ProfileSchema.ts b/src/models/ProfileSchema.ts
index 33291b490e9711c50e8161620ab335029b00161b..9e1aef52b979bcae7d57a32e30a625d0c1fb1ac0 100644
--- a/src/models/ProfileSchema.ts
+++ b/src/models/ProfileSchema.ts
@@ -1,19 +1,26 @@
 import { Document, Schema, model } from 'mongoose';
 import { IWarnings, WarningSchema } from './WarningSchema';
+import { Admin } from 'mongodb';
+
+export enum Role {
+    Admin,
+    Staff,
+    User,
+}
 
 export interface IProfile extends Document {
     external_id: string,
     studentCardNumber: string,
     roomNumber?: string,
-    picture: any,
-    role: string,
+    picture: string,
+    role: Role.Admin | Role.Staff | Role.User,
     email?: string,
     name?: string,
     warnings: [IWarnings] | [],
 };
 
 const ProfileSchema = new Schema({
-    external_id: {type: String, required: true },
+    external_id: {type: String, required: true, unique : true, dropDups: true },
     studentCardNumber: {type: String, required: true },
     roomNumber: {type: String},
     picture: {type: String},
@@ -21,4 +28,4 @@ const ProfileSchema = new Schema({
     warnings: [WarningSchema]
 });
 
-export default model<IProfile>('News', ProfileSchema);
\ No newline at end of file
+export default model<IProfile>('Profile', ProfileSchema);
\ No newline at end of file
diff --git a/src/routes/user.ts b/src/routes/user.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c3baf0ac9e16ea9701e143356782240d442791b5
--- /dev/null
+++ b/src/routes/user.ts
@@ -0,0 +1,37 @@
+import { Application } from 'express';
+import addWarning from "../middlewares/user/addWarning";
+import deleteUser from "../middlewares/user/deleteUser";
+import deleteWarning from "../middlewares/user/deleteWarning";
+import getUser from "../middlewares/user/getUser";
+import getUsersList from "../middlewares/user/getUsersList";
+import getWarning from "../middlewares/user/getWarning";
+import getWarningsList from "../middlewares/user/getWarningsList";
+import updateUser from "../middlewares/user/updateUser";
+import updateWarning from "../middlewares/user/updateWarning";
+import addUser from '../middlewares/user/addUser';
+import authenticated from '../middlewares/auth/authenticated';
+
+
+ const usersRoute = (app: Application): void => {
+    app.get('/users', authenticated(), getUsersList() );
+
+    app.post('/users', authenticated(), addUser() );
+
+    app.get('/users/:id', getUser() );
+
+    app.get('/users/:id/warnings', getWarningsList() );
+    
+    app.get('/users/:userId/warnings/:warningId', getWarning() );
+
+    app.post('/users/:id/warnings', addWarning());
+
+    app.put('/users/:id', updateUser());
+
+    app.put('/users/:userId/warnings/:warningId', updateWarning());
+    
+    app.delete('/users/:id', deleteUser());
+
+    app.delete('/users/:userId/warnings/:warningId', deleteWarning());    
+}
+
+export default usersRoute;
\ No newline at end of file
diff --git a/src/utils/declarations/response.d.ts b/src/utils/declarations/response.d.ts
index fb2d7ee4b3aaea8c4fd741748c86631e764b969f..6d004f4f33ad3c529a7d21f4f28281439024e601 100644
--- a/src/utils/declarations/response.d.ts
+++ b/src/utils/declarations/response.d.ts
@@ -1,4 +1,5 @@
 import { INews } from "../../models/NewsSchema";
+import { IProfile } from "src/models/ProfileSchema";
 
 declare global {
   namespace Express {
@@ -6,6 +7,8 @@ declare global {
       data: {
         news?: INews[] | null;
         newsObject?: INews | null;
+        profile?: IProfile | null;
+        profiles?: IProfile[] | null;
       };
     }
   }