Skip to content
Snippets Groups Projects
Commit eed646c6 authored by Thomas's avatar Thomas
Browse files

Added user roles

parent 6f8abd83
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ import org.springframework.security.authentication.AuthenticationManager; ...@@ -18,6 +18,7 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
...@@ -54,9 +55,13 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte ...@@ -54,9 +55,13 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
User user = (User) auth.getPrincipal(); User user = (User) auth.getPrincipal();
Key key = KeyGenerator.generateKey(); Key key = KeyGenerator.generateKey();
// ! A modifier si gestion multi roles (cf UserDetailsService)
SimpleGrantedAuthority authority = (SimpleGrantedAuthority) user.getAuthorities().toArray()[0];
String token = Jwts.builder() String token = Jwts.builder()
.setSubject(user.getUsername()) .setSubject(user.getUsername())
.claim("username",user.getUsername()) .claim("username",user.getUsername())
.claim("role",authority.getAuthority())
.setIssuedAt(new Date()) .setIssuedAt(new Date())
.setExpiration(toDate(LocalDateTime.now().plusDays(1L))) .setExpiration(toDate(LocalDateTime.now().plusDays(1L)))
.signWith(SignatureAlgorithm.HS512, key) .signWith(SignatureAlgorithm.HS512, key)
......
package mozen.auth; package mozen.auth;
import java.util.ArrayList; import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
...@@ -20,7 +23,20 @@ public class JwtUserDetailsService implements UserDetailsService { ...@@ -20,7 +23,20 @@ public class JwtUserDetailsService implements UserDetailsService {
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
mozen.model.User user = manager.getUserByUsername(username); mozen.model.User user = manager.getUserByUsername(username);
if(user == null) throw new UsernameNotFoundException(username); if(user == null) throw new UsernameNotFoundException(username);
return new User(user.getUsername(), user.getPassword(), new ArrayList<>());
Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
/*
// Gestion multi roles
// Plus propre (Transformer model.Role en Entity et model.User.role en liste de Role)
for(Role role : user.getRoles()){
grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
}
*/
grantedAuthorities.add(new SimpleGrantedAuthority(user.getRole().toString()));
return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
} }
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import mozen.model.Role;
import mozen.model.SignupMessage; import mozen.model.SignupMessage;
import mozen.model.User; import mozen.model.User;
...@@ -22,7 +23,7 @@ public class UserManager implements IUserManager { ...@@ -22,7 +23,7 @@ public class UserManager implements IUserManager {
u.setEmail(message.getEmail()); u.setEmail(message.getEmail());
u.setUsername(message.getUsername()); u.setUsername(message.getUsername());
u.setPassword(bCryptPasswordEncoder.encode(message.getPassword())); u.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
u.setRole("DEFAULT"); u.setRole(Role.Default);
dao.addUser(u); dao.addUser(u);
return u.getId(); return u.getId();
......
package mozen.model;
public enum Role {
Default, Admin
}
\ No newline at end of file
...@@ -7,6 +7,8 @@ import javax.persistence.Basic; ...@@ -7,6 +7,8 @@ import javax.persistence.Basic;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
...@@ -52,7 +54,8 @@ public class User implements Serializable{ ...@@ -52,7 +54,8 @@ public class User implements Serializable{
@Basic @Basic
@Column(nullable = false) @Column(nullable = false)
@NotNull @NotNull
private String role; @Enumerated(EnumType.STRING)
private Role role;
@Basic @Basic
@OneToMany(mappedBy = "author", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OneToMany(mappedBy = "author", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
...@@ -62,7 +65,7 @@ public class User implements Serializable{ ...@@ -62,7 +65,7 @@ public class User implements Serializable{
public User() { public User() {
} }
public User(Long id, String username, String email, String password, String role, Set<Model> models) { public User(Long id, String username, String email, String password, Role role, Set<Model> models) {
this.id = id; this.id = id;
this.username = username; this.username = username;
this.email = email; this.email = email;
...@@ -114,11 +117,11 @@ public class User implements Serializable{ ...@@ -114,11 +117,11 @@ public class User implements Serializable{
} }
@JsonIgnore @JsonIgnore
public String getRole() { public Role getRole() {
return this.role; return this.role;
} }
public void setRole(String role) { public void setRole(Role role) {
this.role = role; this.role = role;
} }
......
...@@ -13,6 +13,7 @@ import mozen.business.IModelDao; ...@@ -13,6 +13,7 @@ import mozen.business.IModelDao;
import mozen.business.IUserDao; import mozen.business.IUserDao;
import mozen.model.CustomLayer; import mozen.model.CustomLayer;
import mozen.model.Model; import mozen.model.Model;
import mozen.model.Role;
import mozen.model.Tag; import mozen.model.Tag;
import mozen.model.TagCategory; import mozen.model.TagCategory;
import mozen.model.User; import mozen.model.User;
...@@ -37,13 +38,13 @@ public class DatabaseFiller { ...@@ -37,13 +38,13 @@ public class DatabaseFiller {
u1.setEmail("user1@email.com"); u1.setEmail("user1@email.com");
u1.setPassword("1234"); u1.setPassword("1234");
u1.setUsername("user 1"); u1.setUsername("user 1");
u1.setRole("DEFAULT"); u1.setRole(Role.Default);
User u2 = new User(); User u2 = new User();
u2.setEmail("user2@email.com"); u2.setEmail("user2@email.com");
u2.setPassword("1234"); u2.setPassword("1234");
u2.setUsername("user 2"); u2.setUsername("user 2");
u2.setRole("ADMIN"); u2.setRole(Role.Admin);
Model m1 = new Model(); Model m1 = new Model();
m1.setAuthor(u1); m1.setAuthor(u1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment