diff --git a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java
index 8fa35612860061c588d06f2ad168f136a267bade..d600d31eaf00a076524983a80a1afdf752e912d2 100644
--- a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java
+++ b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java
@@ -33,7 +33,7 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
     try {
       LoginMessage message = new ObjectMapper().readValue(req.getInputStream(), LoginMessage.class);
 
-      System.err.println("Auth user n:"+message.getUsername()+" p:"+message.getPassword());
+      System.err.println("Login user n:"+message.getUsername()+" p:"+message.getPassword());
 
       return authenticationManager.authenticate(
         new UsernamePasswordAuthenticationToken(message.getUsername(), message.getPassword(), new ArrayList<>())
@@ -47,7 +47,7 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
   protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth) 
   throws IOException, ServletException {
     User user = (User) auth.getPrincipal();
-    String token = JwtUtils.generateToken(user.getUsername());
+    String token = JwtUtils.generateToken(user.getUsername(), user.getAuthorities());
     res.getWriter().write(new ObjectMapper().writeValueAsString(new ResponseMessage(false, token)));
     // res.addHeader("Authorization", "Bearer " + token);
   }
diff --git a/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java
index a874066216e05de5a2d7e26e01b9ead917833af4..cebf77df9db267dee30af9186f4e96435db4d093 100644
--- a/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java
+++ b/mozen/src/main/java/mozen/auth/JwtAuthorizationFilter.java
@@ -2,7 +2,8 @@ package mozen.auth;
 
 import java.io.IOException;
 import java.security.Key;
-import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
@@ -11,9 +12,12 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
 
+import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import mozen.utils.JwtUtils;
 
@@ -42,15 +46,19 @@ public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
   private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
     String token = request.getHeader("Authorization");
     if(token != null) {
-      Key key = JwtUtils.generateKey();
-      String username = Jwts.parser()
-        .setSigningKey(key)
-        .parseClaimsJws(token.replace("Bearer ", ""))
-        .getBody()
-        .getSubject();
-
-      if (username != null) {
-        return new UsernamePasswordAuthenticationToken(username, null, new ArrayList<>());
+      try {
+        Key key = JwtUtils.generateKey();
+        Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token.replace("Bearer ", "")).getBody();
+        String username = (String) claims.get("username");
+        String role = (String) claims.get("role");
+        if (username != null && role != null) {
+          System.err.println("Auth user u:"+username+" r:"+role);
+          Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
+          grantedAuthorities.add(new SimpleGrantedAuthority(role));
+          return new UsernamePasswordAuthenticationToken(username, null, grantedAuthorities);
+        }
+      } catch (Exception e) {
+        return null;
       }
 
       return null;
diff --git a/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java b/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
index a4e25032b27f5680d4dc60733a7e32052161e81a..2cbd49856f3e3c153dd82034797bc0d797bb1c87 100644
--- a/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
+++ b/mozen/src/main/java/mozen/auth/JwtUserDetailsService.java
@@ -21,11 +21,10 @@ public class JwtUserDetailsService implements UserDetailsService {
 
   @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+    System.err.println("[USER DETAILS] u:"+username);
     mozen.model.User user = manager.getUserByUsername(username);
     if(user == null) throw new UsernameNotFoundException(username);
     
-    Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
-    
     /* 
     // Gestion multi roles
     // Plus propre (Transformer model.Role en Entity et model.User.role en liste de Role)
@@ -34,7 +33,8 @@ public class JwtUserDetailsService implements UserDetailsService {
     }
     */
 
-    grantedAuthorities.add(new SimpleGrantedAuthority(user.getRole().toString()));
+    Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
+    grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+user.getRole().toString()));    
 
     return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
   }  
diff --git a/mozen/src/main/java/mozen/auth/WebSecurity.java b/mozen/src/main/java/mozen/auth/WebSecurity.java
index f59850d8203749885ab9e7d73865af5f4234a47c..e42b9763282af70f18bc25171d74a16619354375 100644
--- a/mozen/src/main/java/mozen/auth/WebSecurity.java
+++ b/mozen/src/main/java/mozen/auth/WebSecurity.java
@@ -34,16 +34,30 @@ public class WebSecurity extends WebSecurityConfigurerAdapter{
       .cors()
     .and()
       .authorizeRequests() 
+        // PUBLIC SECTION
         .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
+        .antMatchers("/").permitAll()
         .antMatchers(HttpMethod.POST, "/login").permitAll()
-        .antMatchers(HttpMethod.POST, "/user/signup").permitAll()
+        .antMatchers(HttpMethod.POST, "/users/signup").permitAll()
         .antMatchers(HttpMethod.GET, "/search").permitAll()
         .antMatchers(HttpMethod.GET, "/comments").permitAll()
+        .antMatchers(HttpMethod.GET, "/tags").permitAll()
         .antMatchers(HttpMethod.GET, "/models").permitAll()
-        .antMatchers(HttpMethod.GET, "/models/tags").permitAll()
         .antMatchers(HttpMethod.GET, "/models/download").permitAll()
-        .antMatchers(HttpMethod.GET, "/models/downloadLayer").permitAll()
-        // .anyRequest().authenticated()
+        .antMatchers(HttpMethod.GET, "/layers/download").permitAll()
+
+        // ADMIN SECTION
+        .antMatchers(HttpMethod.GET, "/models/setVerified").hasRole("ADMIN")
+        .antMatchers(HttpMethod.GET, "/users/setAdmin").hasRole("ADMIN")
+        .antMatchers(HttpMethod.DELETE, "/tags").hasRole("ADMIN")
+        .antMatchers(HttpMethod.DELETE, "/tags/category").hasRole("ADMIN")
+        .antMatchers(HttpMethod.POST, "/tags/category").hasRole("ADMIN")
+        .antMatchers(HttpMethod.GET, "/models/list").hasRole("ADMIN")
+        .antMatchers(HttpMethod.GET, "/users/list").hasRole("ADMIN")
+        .antMatchers(HttpMethod.GET, "/comments/list").hasRole("ADMIN")
+
+        // USER SECTION
+        .anyRequest().authenticated()
     .and()
       .addFilter(new JwtAuthenticationFilter(authenticationManager()))
       .addFilter(new JwtAuthorizationFilter(authenticationManager()))
diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java
index 874ffbc5049b7bafb39aa6c72455b0d7cbcb2126..68ab58890de09cf65af15355368eb6a44135d6a7 100644
--- a/mozen/src/main/java/mozen/business/IUserManager.java
+++ b/mozen/src/main/java/mozen/business/IUserManager.java
@@ -7,13 +7,15 @@ import mozen.model.User;
 
 public interface IUserManager {
   User addUser(SignupMessage message);
-  void updateUser(User user, User userToUpdate);
+  void updateUser(User user, User userToUpdate) throws Exception;
   void removeUser(User user, Long id);
 
   Collection<User> getUsers();
   User getUser(Long id);
   User getUserByUsername(String username);
-  
+
+  void setAdmin(Long id, User user) throws Exception;
+
   boolean resetPassword(String email);
   boolean changePassword(String token, String password);
 }
\ 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 d2aac7fa7e0b3ee6dd063024b7f668aebb8d50c2..c579f22f623ec15f83fd88ddfa0525e1d275358e 100644
--- a/mozen/src/main/java/mozen/business/UserManager.java
+++ b/mozen/src/main/java/mozen/business/UserManager.java
@@ -11,6 +11,7 @@ import mozen.model.Role;
 import mozen.messages.SignupMessage;
 import mozen.model.User;
 import mozen.repos.UserRepository;
+import mozen.utils.UserHelper;
 
 @Service
 public class UserManager implements IUserManager {
@@ -29,14 +30,14 @@ public class UserManager implements IUserManager {
     u.setEmail(message.getEmail());
     u.setUsername(message.getUsername());
     u.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
-    u.setRole(Role.ROLE_DEFAULT);
+    u.setRole(Role.DEFAULT);
 
     repo.save(u);
     return u;
   }
 
   @Override
-  public void updateUser(User user, User userToUpdate) {
+  public void updateUser(User user, User userToUpdate) throws Exception {
     if(isRightUser(user, userToUpdate)) repo.save(userToUpdate);
   }
 
@@ -76,8 +77,23 @@ public class UserManager implements IUserManager {
   }
 
   private boolean isRightUser(User userToCheck, User user) {
-    if (userToCheck.getRole() == Role.ROLE_ADMIN) return true;
+    if (userToCheck.getRole() == Role.ADMIN) return true;
     return userToCheck.getId().equals(user.getId());
   }
+
+  @Override
+  public void setAdmin(Long id, User user) throws Exception {
+    User userToUpdate = getUser(id);
+    if (userToUpdate == null)
+      throw new Exception("Unknown user");
+    if (!UserHelper.isAdmin(user))
+      throw new Exception("Not admin");
+
+    Role role = userToUpdate.getRole();
+    if (role == Role.ADMIN) userToUpdate.setRole(Role.DEFAULT);
+    else userToUpdate.setRole(Role.ADMIN);
+
+    repo.save(userToUpdate);
+  }
   
 }
\ 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 1be603d4071e293eb678775395feae224e557082..d6d617bd98ac9fcd7ccd807cc32c4d459712c817 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 {
-  ROLE_DEFAULT, ROLE_ADMIN
+  DEFAULT, ADMIN
 }
\ 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 ffe37fb9ca40ea908c06d7b09c302269074cb8b9..06c624a6c34ddb39b3ae5cc4dd0fec43def50a7b 100644
--- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java
+++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
@@ -48,19 +48,19 @@ public class DatabaseFiller {
     u1.setEmail("user1@email.com");
     u1.setPassword(bCryptPasswordEncoder.encode("1234"));
     u1.setUsername("user 1");
-    u1.setRole(Role.ROLE_DEFAULT);
+    u1.setRole(Role.DEFAULT);
 
     User u2 = new User();
     u2.setEmail("user2@email.com");
     u2.setPassword(bCryptPasswordEncoder.encode("1234"));
     u2.setUsername("user 2");
-    u2.setRole(Role.ROLE_DEFAULT);
+    u2.setRole(Role.DEFAULT);
 
     User admin = new User();
     admin.setEmail("admin@admin.admin");
     admin.setPassword(bCryptPasswordEncoder.encode("1234"));
     admin.setUsername("admin");
-    admin.setRole(Role.ROLE_ADMIN);
+    admin.setRole(Role.ADMIN);
 
     Model m1 = new Model();
     m1.setAuthor(u1);
diff --git a/mozen/src/main/java/mozen/utils/JwtUtils.java b/mozen/src/main/java/mozen/utils/JwtUtils.java
index 11c01364355c0b1ade9c4f534f5c83c7ccc5bef9..3ada232fba8cd945cfa5484c4dfe19b53c6f3d44 100644
--- a/mozen/src/main/java/mozen/utils/JwtUtils.java
+++ b/mozen/src/main/java/mozen/utils/JwtUtils.java
@@ -3,10 +3,13 @@ package mozen.utils;
 import java.security.Key;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.util.Collection;
 import java.util.Date;
 
 import javax.crypto.spec.SecretKeySpec;
 
+import org.springframework.security.core.GrantedAuthority;
+
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 
@@ -17,10 +20,12 @@ public class JwtUtils {
     return key;
   }
 
-  public static String generateToken(String username) {
+  public static String generateToken(String username, Collection<GrantedAuthority> roles) {
+    String role = roles.toArray()[0].toString();
     return Jwts.builder()
       .setSubject(username)
       .claim("username", username)
+      .claim("role", role)
       .setIssuedAt(new Date())
       .setExpiration(toDate(LocalDateTime.now().plusDays(1L)))
       .signWith(SignatureAlgorithm.HS512, generateKey())
diff --git a/mozen/src/main/java/mozen/utils/UserHelper.java b/mozen/src/main/java/mozen/utils/UserHelper.java
index 3054c20f3aed61e927305e7edc37d9f29b86ff0e..847780211dc650d395190c00251e66a4e7cfb402 100644
--- a/mozen/src/main/java/mozen/utils/UserHelper.java
+++ b/mozen/src/main/java/mozen/utils/UserHelper.java
@@ -17,7 +17,7 @@ public class UserHelper {
   }
 
   public static boolean isAdmin(User user) {
-    return user.getRole() == Role.ROLE_ADMIN;
+    return user.getRole() == Role.ADMIN;
   }
 
   public static User getCurrentUser(IUserManager userManager) {
diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java
index 6d8978f85bbd8e2f15a8fdea1e6415b9d8b65fdd..4a9f4d9e019ee0cd5786467edaefc66768f0a306 100644
--- a/mozen/src/main/java/mozen/web/UserController.java
+++ b/mozen/src/main/java/mozen/web/UserController.java
@@ -1,11 +1,15 @@
 package mozen.web;
 
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.validation.Valid;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.CrossOrigin;
@@ -25,7 +29,7 @@ import mozen.utils.JwtUtils;
 import mozen.utils.UserHelper;
 
 @RestController
-@RequestMapping("/user")
+@RequestMapping("/users")
 @CrossOrigin
 public class UserController {
   @Autowired
@@ -87,8 +91,10 @@ public class UserController {
     ResponseMessage response = new ResponseMessage(false, "");
 
     try {
-      userManager.addUser(message);
-      response.setMessage(JwtUtils.generateToken(message.getUsername()));
+      User user = userManager.addUser(message);
+      Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
+      grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+user.getRole()));
+      response.setMessage(JwtUtils.generateToken(user.getUsername(), grantedAuthorities));
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
@@ -97,4 +103,24 @@ public class UserController {
     return ResponseEntity.ok(response);
   }
 
+  @GetMapping("/setAdmin")
+  public ResponseEntity<ResponseMessage> setAdmin(@RequestParam(value = "id", required = true) Long id) {
+    ResponseMessage response = new ResponseMessage(false, "");
+    User user = UserHelper.getCurrentUser(userManager);
+    if(user == null) {
+      response.setError(true);
+      response.setMessage("User unknown");
+      return ResponseEntity.badRequest().body(response);
+    }
+
+    try {
+      userManager.setAdmin(id, user);
+    } catch (Exception e) {
+      response.setError(true);
+      response.setMessage(e.getMessage());
+      return ResponseEntity.badRequest().body(response);
+    }
+
+    return ResponseEntity.ok(response);
+  }
 }
\ No newline at end of file