diff --git a/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java b/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
index 56e3b531f881bde3db9d5ace75f9477d5d6f2201..a4e25032b27f5680d4dc60733a7e32052161e81a 100644
--- a/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
+++ b/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
@@ -37,6 +37,5 @@ public class JwtUserDetailsService implements UserDetailsService {
     grantedAuthorities.add(new SimpleGrantedAuthority(user.getRole().toString()));
 
     return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
-  }
-  
+  }  
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/auth/WebSecurity.java b/mozen/src/main/java/mozen/auth/WebSecurity.java
index b220efd0c98edd7ada7aa0e00140cf8d6979f273..014bb262e4f009c33325be00137db523b436da50 100644
--- a/mozen/src/main/java/mozen/auth/WebSecurity.java
+++ b/mozen/src/main/java/mozen/auth/WebSecurity.java
@@ -31,6 +31,8 @@ public class WebSecurity extends WebSecurityConfigurerAdapter{
         .antMatchers(HttpMethod.GET, "/search").permitAll()
         .antMatchers(HttpMethod.GET, "/models").permitAll()
         .antMatchers(HttpMethod.GET, "/models/tags").permitAll()
+        .antMatchers(HttpMethod.GET, "/user/list").hasRole("ADMIN")
+        .antMatchers(HttpMethod.GET, "/model/list").hasRole("ADMIN")
         .anyRequest().authenticated()
         .and()
         .addFilter(new JwtAuthenticationFilter(authenticationManager()))
diff --git a/mozen/src/main/java/mozen/business/IModelManager.java b/mozen/src/main/java/mozen/business/IModelManager.java
index f4de25d36f87f08e71355b932978b6c871fcd1be..b559eb864cd679ca60f605c77fea23bd25393160 100644
--- a/mozen/src/main/java/mozen/business/IModelManager.java
+++ b/mozen/src/main/java/mozen/business/IModelManager.java
@@ -23,6 +23,7 @@ public interface IModelManager {
   void addTag(TagMessage message);
 
   Model getModel(long id);
+  Collection<Model> getModels();
   Collection<TagCategory> getTags();
   SearchResult findModel(String name, int page, int size, String sort);
 
diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java
index 66e92bfdca25165ab9bd63b3988109f4d66d1460..58cfdf22af7a73bb2bb9ce6a458e574eea4737d7 100644
--- a/mozen/src/main/java/mozen/business/IUserManager.java
+++ b/mozen/src/main/java/mozen/business/IUserManager.java
@@ -1,13 +1,16 @@
 package mozen.business;
 
+import java.util.Collection;
+
 import mozen.messages.SignupMessage;
 import mozen.model.User;
 
 public interface IUserManager {
   Long addUser(SignupMessage message);
-  void updateUser(User u);
-  void removeUser(Long id);
+  void updateUser(User user, User userToUpdate);
+  void removeUser(User user, Long id);
 
+  Collection<User> getUsers();
   User getUser(Long id);
   User getUserByUsername(String username);
   
diff --git a/mozen/src/main/java/mozen/business/ModelManager.java b/mozen/src/main/java/mozen/business/ModelManager.java
index 718f383d435aea15b42c2f7058225be004355f5a..dcaeed6ae7bceb31d799f7bf878bb36b62fb8f66 100644
--- a/mozen/src/main/java/mozen/business/ModelManager.java
+++ b/mozen/src/main/java/mozen/business/ModelManager.java
@@ -17,6 +17,7 @@ import mozen.messages.ModelMessage;
 import mozen.messages.TagMessage;
 import mozen.model.CustomLayer;
 import mozen.model.Model;
+import mozen.model.Role;
 import mozen.messages.SearchResult;
 import mozen.model.Tag;
 import mozen.model.TagCategory;
@@ -188,10 +189,12 @@ public class ModelManager implements IModelManager {
   }
 
   private boolean isLayerAuthor(CustomLayer layer, User user) {
+    if (user.getRole() == Role.ROLE_ADMIN) return true;
     return layer.getModel().getAuthor() == user;
   }
 
   private boolean isModelAuthor(Model model, User user) {
+    if (user.getRole() == Role.ROLE_ADMIN) return true;
     return model.getAuthor() == user;
   }
 
@@ -218,4 +221,9 @@ public class ModelManager implements IModelManager {
     return result;
   }
 
+  @Override
+  public Collection<Model> getModels() {
+    return modelRepo.findAll();
+  }
+
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/ModelRepository.java b/mozen/src/main/java/mozen/business/ModelRepository.java
index 18120e02b03d1c6e3dc2abeb978fa870665d881b..649ecb322c2ae0f9281381d2fba9f0d9933ed616 100644
--- a/mozen/src/main/java/mozen/business/ModelRepository.java
+++ b/mozen/src/main/java/mozen/business/ModelRepository.java
@@ -10,10 +10,11 @@ import mozen.model.Model;
 import mozen.model.Tag;
 
 public interface ModelRepository extends PagingAndSortingRepository<Model, Long> {
+  Collection<Model> findAll();
   Page<Model> findByNameContainingIgnoreCase(String name, Pageable pageable);
 
   Page<Model> findByNameContainingIgnoreCaseAndTagsIn(String name, Collection<Tag> tags, Pageable pageable);
 
-  // @Query("SELECT m FROM Model m WHERE m.name LIKE :name AND m.tags CONTAINS (SELECT t FROM Tag WHERE t.name IN :tags)") <- horrible et c'est même pas complet
+  // @Query("SELECT m FROM Model m WHERE m.name LIKE :name AND m.tags CONTAINS (SELECT t FROM Tag WHERE t.name IN :tags)") <- enfer absolu
   // Page<Model> findByNameContainingIgnoreCaseTags(@Param("name") String name, @Param("tags") Collection<String> tags, Pageable pageable);
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/UserManager.java b/mozen/src/main/java/mozen/business/UserManager.java
index d42d17db4a84720b33bd5ed2fee343817cf4ea3c..6cbfb6187f113416acbb8ed7efe02aaac593c81d 100644
--- a/mozen/src/main/java/mozen/business/UserManager.java
+++ b/mozen/src/main/java/mozen/business/UserManager.java
@@ -1,5 +1,7 @@
 package mozen.business;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
@@ -19,25 +21,27 @@ public class UserManager implements IUserManager {
 
   @Override
   public Long addUser(SignupMessage message) {
-    System.err.println("[USER MANAGER] add new user u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
+    System.err.println("[USER MANAGER] add new user u:" + message.getUsername() + " e:" + message.getEmail() + " p:"
+        + message.getPassword());
     User u = new User();
     u.setEmail(message.getEmail());
     u.setUsername(message.getUsername());
     u.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
-    u.setRole(Role.Default);
+    u.setRole(Role.ROLE_DEFAULT);
 
     repo.save(u);
     return u.getId();
   }
 
   @Override
-  public void updateUser(User u) {
-    repo.save(u);
+  public void updateUser(User user, User userToUpdate) {
+    if(isRightUser(user, userToUpdate)) repo.save(userToUpdate);
   }
 
   @Override
-  public void removeUser(Long id) {
-    repo.deleteById(id);
+  public void removeUser(User user, Long id) {
+    User userToRemove = repo.findById(id).get();
+    if(isRightUser(user, userToRemove)) repo.deleteById(id);
   }
 
   @Override
@@ -61,5 +65,15 @@ public class UserManager implements IUserManager {
   public User getUserByUsername(String username) {
     return repo.findByUsername(username).get(0);
   }
+
+  @Override
+  public Collection<User> getUsers() {
+    return repo.findAll();
+  }
+
+  private boolean isRightUser(User userToCheck, User user) {
+    if (userToCheck.getRole() == Role.ROLE_ADMIN) return true;
+    return userToCheck.getId().equals(user.getId());
+  }
   
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/UserRepository.java b/mozen/src/main/java/mozen/business/UserRepository.java
index adb8194a159021a0454d06301815a79e14be196a..e02411aab4fdff33fb1df96e30c96fe61905373a 100644
--- a/mozen/src/main/java/mozen/business/UserRepository.java
+++ b/mozen/src/main/java/mozen/business/UserRepository.java
@@ -8,4 +8,5 @@ import mozen.model.User;
 
 public interface UserRepository extends PagingAndSortingRepository<User, Long> {
   List<User> findByUsername(String username);
+  List<User> findAll();
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/model/Role.java b/mozen/src/main/java/mozen/model/Role.java
index 1db11ea5b2a49f5bea6efe93938fd27ff183f19b..1be603d4071e293eb678775395feae224e557082 100644
--- a/mozen/src/main/java/mozen/model/Role.java
+++ b/mozen/src/main/java/mozen/model/Role.java
@@ -1,5 +1,5 @@
 package mozen.model;
 
 public enum Role {
-  Default, Admin
+  ROLE_DEFAULT, ROLE_ADMIN
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/model/User.java b/mozen/src/main/java/mozen/model/User.java
index eb80be64451467d2b2600d5ab96580c5928ea088..f5666c639a6ea834a053a4edaee94ab4b26ab24e 100644
--- a/mozen/src/main/java/mozen/model/User.java
+++ b/mozen/src/main/java/mozen/model/User.java
@@ -116,14 +116,11 @@ public class User implements Serializable{
     this.models = models;
   }
 
-  @JsonIgnore
   public Role getRole() {
     return this.role;
   }
 
   public void setRole(Role role) {
     this.role = role;
-  }
-
-  
+  }  
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
index 378c8e6b52f20ea74cc8f1789033a84ef8787f55..75e0b15665fc05a8565e28099ff7d8da82b25b75 100644
--- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java
+++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
@@ -47,13 +47,19 @@ public class DatabaseFiller {
     u1.setEmail("user1@email.com");
     u1.setPassword(bCryptPasswordEncoder.encode("1234"));
     u1.setUsername("user 1");
-    u1.setRole(Role.Default);
+    u1.setRole(Role.ROLE_DEFAULT);
 
     User u2 = new User();
     u2.setEmail("user2@email.com");
     u2.setPassword(bCryptPasswordEncoder.encode("1234"));
     u2.setUsername("user 2");
-    u2.setRole(Role.Admin);
+    u2.setRole(Role.ROLE_DEFAULT);
+
+    User admin = new User();
+    admin.setEmail("admin@admin.admin");
+    admin.setPassword(bCryptPasswordEncoder.encode("1234"));
+    admin.setUsername("admin");
+    admin.setRole(Role.ROLE_ADMIN);
 
     Model m1 = new Model();
     m1.setAuthor(u1);
@@ -63,27 +69,6 @@ public class DatabaseFiller {
     m1.setVotes(0);
     m1.setAdded(new Date());
     m1.setLastModified(new Date());
-
-    /*Set<Tag> m1tags = new HashSet<Tag>();
-
-    TagCategory ca1 = new TagCategory();
-    ca1.setName("Layer");
-
-    Tag t1 = new Tag();
-    t1.setCategory(ca1);
-    t1.setName("Conv2D");
-
-    TagCategory ca2 = new TagCategory();
-    ca2.setName("Architecture");
-
-    Tag t2 = new Tag();
-    t2.setCategory(ca2);
-    t2.setName("VGG19");
-
-    m1tags.add(t1);
-    m1tags.add(t2);
-    m1.setTags(m1tags);
-    */
     m1.setTags(tagLoader("tags.txt"));
 
     Set<CustomLayer> m1layers = new HashSet<CustomLayer>();
@@ -99,6 +84,7 @@ public class DatabaseFiller {
 
     userRepo.save(u1);
     userRepo.save(u2);
+    userRepo.save(admin);
 
     modelRepo.save(m1);
   }
diff --git a/mozen/src/main/java/mozen/web/AdminController.java b/mozen/src/main/java/mozen/web/AdminController.java
deleted file mode 100644
index 8136b1c98851c20d6fcb4ac6a7927a3d2149e320..0000000000000000000000000000000000000000
--- a/mozen/src/main/java/mozen/web/AdminController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package mozen.web;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import mozen.business.IModelManager;
-import mozen.business.IUserManager;
-
-@RestController
-@RequestMapping("/admin")
-@CrossOrigin
-public class AdminController {
-  @Autowired
-  IModelManager modelManager;
-
-  @Autowired
-  IUserManager userManager;
-}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java
index 974687641e599ed620399323d8a8c3489182f1fd..8a19b405e085f86d97f2b0bcb6e0c8ba856cb348 100644
--- a/mozen/src/main/java/mozen/web/ModelController.java
+++ b/mozen/src/main/java/mozen/web/ModelController.java
@@ -45,7 +45,7 @@ public class ModelController {
 
   @GetMapping("")
   public ResponseEntity<?> getModelDetails(@RequestParam(value = "id", required = false) Long id) {
-    User user = getUser();
+    User user = getCurrentUser();
     if(user != null) {
       return ResponseEntity.ok().body(user.getModels());
     } else {
@@ -57,7 +57,7 @@ public class ModelController {
   @PostMapping("")
   public ResponseEntity<ResponseMessage> addModel(@RequestBody @Valid ModelMessage message) {
     ResponseMessage response = new ResponseMessage(false, "");
-    User user = getUser();
+    User user = getCurrentUser();
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
@@ -78,7 +78,7 @@ public class ModelController {
   @PutMapping("")
   public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, @RequestBody @Valid Model model) {
     ResponseMessage response = new ResponseMessage(false, "");
-    User user = getUser();
+    User user = getCurrentUser();
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
@@ -98,7 +98,7 @@ public class ModelController {
   @DeleteMapping("")
   public ResponseEntity<ResponseMessage> deleteModel(@RequestParam(value = "id", required = true) Long id) {
     ResponseMessage response = new ResponseMessage(false, "");
-    User user = getUser();
+    User user = getCurrentUser();
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
@@ -115,6 +115,11 @@ public class ModelController {
     return ResponseEntity.ok(response);
   }
 
+  @GetMapping("/list")
+  public Collection<Model> getAllModels() {
+    return modelManager.getModels();
+  }
+
   @GetMapping("/tags")
   public Collection<TagCategory> getTags() {
     return modelManager.getTags();
@@ -129,7 +134,7 @@ public class ModelController {
   @PostMapping("/upload")
   public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "id", required = true) Long id) {
     ResponseMessage response = new ResponseMessage(false, "");
-    User user = getUser();
+    User user = getCurrentUser();
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
@@ -171,7 +176,7 @@ public class ModelController {
     @RequestParam(value = "id", required = true) Long id,
     @RequestParam(value = "name", required = true) String name) {
     ResponseMessage response = new ResponseMessage(false, "");
-    User user = getUser();
+    User user = getCurrentUser();
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
@@ -189,7 +194,7 @@ public class ModelController {
     return ResponseEntity.ok(response);
   }
 
-  private User getUser() {
+  private User getCurrentUser() {
     Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 
     if (!(auth instanceof AnonymousAuthenticationToken)) {
diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java
index 227b8487c4975a0e59cb1687881e0c2bcee721da..fe4de261347fe0119fb785ad6a473699f8791608 100644
--- a/mozen/src/main/java/mozen/web/UserController.java
+++ b/mozen/src/main/java/mozen/web/UserController.java
@@ -1,16 +1,22 @@
 package mozen.web;
 
+import java.util.Collection;
+
 import javax.validation.Valid;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import mozen.business.IUserManager;
@@ -32,6 +38,50 @@ public class UserController {
     return manager.getUserByUsername(username);
   }
 
+  @GetMapping("/list")
+  public Collection<User> getUserList() {
+    return manager.getUsers();
+  }
+
+  @PostMapping("")
+  public ResponseEntity<ResponseMessage> changeUserDetails(@RequestParam User userToUpdate) {
+    ResponseMessage response = new ResponseMessage(false, "");
+    User user = getCurrentUser();
+    if(user == null) {
+      response.setError(true);
+      response.setMessage("User unknown");
+      return ResponseEntity.ok(response);
+    }
+
+    try {
+      manager.updateUser(user ,userToUpdate);
+    } catch (Exception e) {
+      response.setError(true);
+      response.setMessage(e.getMessage());
+    }
+    
+    return ResponseEntity.ok().build();
+  }
+
+  @DeleteMapping("")
+  public ResponseEntity<ResponseMessage> deleteUser(@RequestParam Long id) {
+    ResponseMessage response = new ResponseMessage(false, "");
+    User user = getCurrentUser();
+    if(user == null) {
+      response.setError(true);
+      response.setMessage("User unknown");
+      return ResponseEntity.ok(response);
+    }
+
+    try {
+      manager.removeUser(user, id);
+    } catch (Exception e) {
+      response.setError(true);
+      response.setMessage(e.getMessage());
+    }
+    return ResponseEntity.ok().build();
+  }
+
   @PostMapping("/signup")
   public ResponseEntity<ResponseMessage> addUser(@RequestBody @Valid SignupMessage message, BindingResult result) {
     System.err.println("SIGNUP u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
@@ -48,4 +98,15 @@ public class UserController {
     return ResponseEntity.ok(response);
   }
 
+  private User getCurrentUser() {
+    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+
+    if (!(auth instanceof AnonymousAuthenticationToken)) {
+      String username = (String) auth.getPrincipal();
+      return manager.getUserByUsername(username);
+    } else {
+      return null;
+    }
+  }
+
 }
\ No newline at end of file