diff --git a/ExpressAPI/src/helpers/Prisma/Extensions/UserResultExtension.ts b/ExpressAPI/src/helpers/Prisma/Extensions/UserResultExtension.ts
index 9315569e912f7acb2ef0084bf926e90c0d56d9a0..9ece43dcc31b2dd9fde697a33948f6d72fc15247 100644
--- a/ExpressAPI/src/helpers/Prisma/Extensions/UserResultExtension.ts
+++ b/ExpressAPI/src/helpers/Prisma/Extensions/UserResultExtension.ts
@@ -1,8 +1,7 @@
-import { Prisma }    from '@prisma/client';
-import Config        from '../../../config/Config';
-import LazyVal       from '../../../shared/helpers/LazyVal';
-import GitlabUser    from '../../../shared/types/Gitlab/GitlabUser';
-import GitlabManager from '../../../managers/GitlabManager';
+import { Prisma, UserRole } from '@prisma/client';
+import LazyVal              from '../../../shared/helpers/LazyVal';
+import GitlabUser           from '../../../shared/types/Gitlab/GitlabUser';
+import GitlabManager        from '../../../managers/GitlabManager';
 
 
 export default Prisma.defineExtension(client => {
@@ -14,16 +13,21 @@ export default Prisma.defineExtension(client => {
                                                role: true
                                            },
                                            compute(user) {
-                                               return Config.permissions.teachingStaff.includes(user.role!);
+                                               return user.role == UserRole.TEACHING_STAFF || user.role == UserRole.ADMIN;
                                            }
                                        },
-                                       gitlabProfile  : {
+                                       isAdmin        : {
                                            needs: {
-                                               gitlabId: true
+                                               role: true
                                            },
+                                           compute(user) {
+                                               return user.role == UserRole.ADMIN;
+                                           }
+                                       },
+                                       gitlabProfile  : {
                                            compute(user) {
                                                return new LazyVal<GitlabUser | undefined>(() => {
-                                                   return GitlabManager.getUserById(user.gitlabId);
+                                                   return GitlabManager.getUserById(user.id);
                                                });
                                            }
                                        }
diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts
index fca3977ce07f14eada038511f9106ccf539fba0a..b057966d5d504aaf64e54e91194859d8fe91536e 100644
--- a/ExpressAPI/src/managers/GitlabManager.ts
+++ b/ExpressAPI/src/managers/GitlabManager.ts
@@ -142,7 +142,7 @@ class GitlabManager {
         };
         members.forEach(member => {
             if ( member.access_level >= GitlabAccessLevel.REPORTER ) {
-                if ( member.id === req.session.profile.gitlabId ) {
+                if ( member.id === req.session.profile.id ) {
                     isUsersAtLeastReporter.user = true;
                 } else if ( member.id === Config.gitlab.account.id ) {
                     isUsersAtLeastReporter.dojo = true;
diff --git a/ExpressAPI/src/managers/UserManager.ts b/ExpressAPI/src/managers/UserManager.ts
index 615cbcb37cb5c5b6ec06731c50a1acd391260956..b69705e1e6b5c65c29efe2a0590b27b7a51c48b2 100644
--- a/ExpressAPI/src/managers/UserManager.ts
+++ b/ExpressAPI/src/managers/UserManager.ts
@@ -1,7 +1,8 @@
-import GitlabUser from '../shared/types/Gitlab/GitlabUser';
-import { Prisma } from '@prisma/client';
-import db         from '../helpers/DatabaseHelper';
-import { User }   from '../types/DatabaseTypes';
+import GitlabUser    from '../shared/types/Gitlab/GitlabUser';
+import { Prisma }    from '@prisma/client';
+import db            from '../helpers/DatabaseHelper';
+import GitlabProfile from '../shared/types/Gitlab/GitlabProfile';
+import { User }      from '../types/DatabaseTypes';
 
 
 class UserManager {
@@ -23,23 +24,36 @@ class UserManager {
                                         }) as unknown as User ?? undefined;
     }
 
-    async getByGitlabId(gitlabId: number, returnIdIfUndefined: boolean = true, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> {
-        return await db.user.findUnique({
-                                            where  : {
-                                                gitlabId: gitlabId
-                                            },
-                                            include: include
-                                        }) as unknown as User ?? (returnIdIfUndefined ? gitlabId : undefined);
+    async getUpdateFromGitlabProfile(gitlabProfile: GitlabProfile, refreshToken: string): Promise<User> {
+        await db.user.upsert({
+                                 where : {
+                                     id: gitlabProfile.id
+                                 },
+                                 update: {
+                                     mail          : gitlabProfile.email,
+                                     gitlabLastInfo: gitlabProfile
+                                 },
+                                 create: {
+                                     id            : gitlabProfile.id,
+                                     name          : gitlabProfile.name,
+                                     mail          : gitlabProfile.email,
+                                     gitlabUsername: gitlabProfile.username,
+                                     gitlabLastInfo: gitlabProfile,
+                                     deleted       : false
+                                 }
+                             });
+
+        return (await this.getById(gitlabProfile.id))!;
     }
 
     async getFromGitlabUser(gitlabUser: GitlabUser, createIfNotExist: boolean = false, include: Prisma.UserInclude | undefined = undefined): Promise<User | number | undefined> {
-        let user = await this.getByGitlabId(gitlabUser.id, true, include);
+        let user = await this.getById(gitlabUser.id, include) ?? gitlabUser.id;
 
         if ( typeof user === 'number' && createIfNotExist ) {
             user = (await db.user.create({
                                              data: {
-                                                 firstname: gitlabUser.name,
-                                                 gitlabId : gitlabUser.id
+                                                 id            : gitlabUser.id,
+                                                 gitlabUsername: gitlabUser.name
                                              }
                                          })).id;
         }
diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index 0e8926263d792b77a20c60ca36b1c64134a5f3d5..709342bae618ff290480160efb852976eab2f63a 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -136,11 +136,11 @@ class AssignmentRoutes implements RoutesManager {
                                                                                   connectOrCreate: [ ...params.members.map(gitlabUser => {
                                                                                       return {
                                                                                           create: {
-                                                                                              gitlabId : gitlabUser.id,
-                                                                                              firstname: gitlabUser.name
+                                                                                              id            : gitlabUser.id,
+                                                                                              gitlabUsername: gitlabUser.name
                                                                                           },
                                                                                           where : {
-                                                                                              gitlabId: gitlabUser.id
+                                                                                              id: gitlabUser.id
                                                                                           }
                                                                                       };
                                                                                   }) ]
diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts
index e773d8c2f08c1484a830a28edb962e4031d9de73..8eab4ee47e9b6f8fcaa4605f77ed800dc72605ba 100644
--- a/ExpressAPI/src/routes/ExerciseRoutes.ts
+++ b/ExpressAPI/src/routes/ExerciseRoutes.ts
@@ -135,7 +135,7 @@ class ExerciseRoutes implements RoutesManager {
         }
 
         try {
-            await Promise.all([ ...new Set([ ...assignment.staff.map(user => user.gitlabId), ...params.members.map(member => member.id) ]) ].map(async (memberId: number): Promise<GitlabMember | false> => {
+            await Promise.all([ ...new Set([ ...assignment.staff.map(user => user.id), ...params.members.map(member => member.id) ]) ].map(async (memberId: number): Promise<GitlabMember | false> => {
                 try {
                     return await GitlabManager.addRepositoryMember(repository.id, memberId, GitlabAccessLevel.DEVELOPER);
                 } catch ( e ) {
@@ -158,11 +158,11 @@ class ExerciseRoutes implements RoutesManager {
                                                                             connectOrCreate: [ ...params.members.map(gitlabUser => {
                                                                                 return {
                                                                                     create: {
-                                                                                        gitlabId : gitlabUser.id,
-                                                                                        firstname: gitlabUser.name
+                                                                                        id            : gitlabUser.id,
+                                                                                        gitlabUsername: gitlabUser.name
                                                                                     },
                                                                                     where : {
-                                                                                        gitlabId: gitlabUser.id
+                                                                                        id: gitlabUser.id
                                                                                     }
                                                                                 };
                                                                             }) ]
diff --git a/ExpressAPI/src/types/DatabaseTypes.ts b/ExpressAPI/src/types/DatabaseTypes.ts
index bdb25f8c14088d4dcc8524f309a52d5380556a1c..91b3389d79d81d26cbbb7c93c0e9511dcf3143e4 100644
--- a/ExpressAPI/src/types/DatabaseTypes.ts
+++ b/ExpressAPI/src/types/DatabaseTypes.ts
@@ -26,9 +26,10 @@ const resultBase = Prisma.validator<Prisma.ResultDefaultArgs>()({
                                                                 });
 
 
-export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'password'> & {
-    password?: string
+export type User = Omit<Prisma.UserGetPayload<typeof userBase>, 'gitlabLastRefreshToken'> & {
+    gitlabLastRefreshToken?: string
     isTeachingStaff: boolean
+    isAdmin: boolean
     gitlabProfile: LazyVal<GitlabUser>
 }
 export type Assignment = Prisma.AssignmentGetPayload<typeof assignmentBase>