From dc54942919c4e868d60fa0084fb46a37a7e1faba Mon Sep 17 00:00:00 2001 From: hou27 Date: Mon, 27 Jun 2022 17:54:59 +0900 Subject: [PATCH] Implement User Role --- src/main/java/com/api/AppConfig.java | 26 ---------------- .../java/com/api/auth/AuthServiceImpl.java | 2 ++ .../java/com/api/auth/dtos/SignUpReq.java | 30 +++++++++++-------- .../api/config/UserDetailsServiceImpl.java | 5 ++-- .../java/com/api/user/UserController.java | 1 + .../java/com/api/user/domain/UserRole.java | 11 +++++-- src/main/java/com/api/user/domain/Users.java | 15 ++++++---- .../api/user/repository/UserRepository.java | 1 + 8 files changed, 44 insertions(+), 47 deletions(-) delete mode 100644 src/main/java/com/api/AppConfig.java diff --git a/src/main/java/com/api/AppConfig.java b/src/main/java/com/api/AppConfig.java deleted file mode 100644 index 9985244..0000000 --- a/src/main/java/com/api/AppConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.api; - -//@Configuration -//public class AppConfig { -// private final UserRepository userRepository; -// private final PasswordEncoder bCryptPasswordEncoder; -// -// public AppConfig(UserRepository userRepository, PasswordEncoder bCryptPasswordEncoder) { -// System.out.println("AppConfig"); -// System.out.println("userRepository = " + userRepository); -// this.userRepository = userRepository; -// this.bCryptPasswordEncoder = bCryptPasswordEncoder; -// } -// -// @Bean -// public UserService userService() { -// System.out.println("userService"); -// return new UserServiceImpl(userRepository, bCryptPasswordEncoder); -// } -// -//// @Bean -//// public BCryptPasswordEncoder passwordEncoder() { -//// System.out.println("passwordEncoder"); -//// return new BCryptPasswordEncoder(); -//// } -//} diff --git a/src/main/java/com/api/auth/AuthServiceImpl.java b/src/main/java/com/api/auth/AuthServiceImpl.java index 0b86817..513d7f5 100644 --- a/src/main/java/com/api/auth/AuthServiceImpl.java +++ b/src/main/java/com/api/auth/AuthServiceImpl.java @@ -45,7 +45,9 @@ public class AuthServiceImpl implements AuthService { if(userRepository.existsByEmail(signUpReq.getEmail())) { return new SignUpRes(false, "Your Mail already Exist."); } + Users newUser = signUpReq.toUserEntity(); + newUser.hashPassword(bCryptPasswordEncoder); Users user = userRepository.save(newUser); diff --git a/src/main/java/com/api/auth/dtos/SignUpReq.java b/src/main/java/com/api/auth/dtos/SignUpReq.java index 7ddd2ef..f9518a7 100644 --- a/src/main/java/com/api/auth/dtos/SignUpReq.java +++ b/src/main/java/com/api/auth/dtos/SignUpReq.java @@ -1,5 +1,6 @@ package com.api.auth.dtos; +import com.api.user.domain.UserRole; import com.api.user.domain.Users; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; @@ -9,6 +10,7 @@ import lombok.ToString; @Getter @ToString +@Builder public class SignUpReq { @NotEmpty(message = "Please enter your Email") @Email @@ -17,23 +19,27 @@ public class SignUpReq { private String password; @NotEmpty(message = "Please enter your Name") private String name; - - @Builder - public SignUpReq(String email, String password, String name) { - this.email = email; - this.password = password; - this.name = name; - } + private UserRole role; /** * Transform to User Entity * @return User Entity */ public Users toUserEntity() { - return Users.builder() - .email(this.getEmail()) - .password(this.getPassword()) - .name(this.getName()) - .build(); + if(this.getRole() != null) { + return Users.builder() + .email(this.getEmail()) + .password(this.getPassword()) + .name(this.getName()) + .role(this.getRole()) + .build(); + } + else { + return Users.builder() + .email(this.getEmail()) + .password(this.getPassword()) + .name(this.getName()) + .build(); + } } } diff --git a/src/main/java/com/api/config/UserDetailsServiceImpl.java b/src/main/java/com/api/config/UserDetailsServiceImpl.java index 9a94687..e1f0f58 100644 --- a/src/main/java/com/api/config/UserDetailsServiceImpl.java +++ b/src/main/java/com/api/config/UserDetailsServiceImpl.java @@ -3,7 +3,7 @@ package com.api.config; import com.api.user.domain.Users; import com.api.exception.UserNotFoundException; import com.api.user.repository.UserRepository; -import java.util.HashSet; +import java.util.Collections; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; @@ -21,7 +21,8 @@ public class UserDetailsServiceImpl implements UserDetailsService { System.out.println("email in loadUserByUsername = " + email); Users user = userRepository.findByEmail(email) .orElseThrow(UserNotFoundException::new); - Set grantedAuthorities = new HashSet<>(); + + Set grantedAuthorities = Collections.singleton(user.getRole()); return new org .springframework diff --git a/src/main/java/com/api/user/UserController.java b/src/main/java/com/api/user/UserController.java index fe9f863..ea27bfd 100644 --- a/src/main/java/com/api/user/UserController.java +++ b/src/main/java/com/api/user/UserController.java @@ -27,6 +27,7 @@ public class UserController { Users userDetail = userService.findByEmail(userDetails.getUsername()) .orElseThrow(() -> new UserNotFoundException()); + System.out.println("userDetails.getAuthorities " + userDetails.getAuthorities()); return ProfileRes.builder() .email(userDetail.getEmail()) .name(userDetail.getName()) diff --git a/src/main/java/com/api/user/domain/UserRole.java b/src/main/java/com/api/user/domain/UserRole.java index afb08ca..224db22 100644 --- a/src/main/java/com/api/user/domain/UserRole.java +++ b/src/main/java/com/api/user/domain/UserRole.java @@ -1,8 +1,15 @@ package com.api.user.domain; import lombok.Getter; +import org.springframework.security.core.GrantedAuthority; @Getter -public enum UserRole { - ROLE_USER // Spring Security의 role 네이밍 규칙 : ROLE_권한이름 +public enum UserRole implements GrantedAuthority { + ROLE_CLIENT, // Spring Security의 role 네이밍 규칙 : ROLE_권한이름 + ROLE_ADMIN; + + @Override + public String getAuthority() { + return null; + } } diff --git a/src/main/java/com/api/user/domain/Users.java b/src/main/java/com/api/user/domain/Users.java index 466dd72..dc2142f 100644 --- a/src/main/java/com/api/user/domain/Users.java +++ b/src/main/java/com/api/user/domain/Users.java @@ -3,9 +3,12 @@ package com.api.user.domain; import com.api.common.domain.CoreEntity; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; import org.springframework.security.crypto.password.PasswordEncoder; @@ -15,6 +18,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; @Getter @Setter @NoArgsConstructor @ToString +@Builder public class Users extends CoreEntity { @Column(nullable = false, unique = true) private String email; @@ -22,16 +26,17 @@ public class Users extends CoreEntity { private String password; @Column(length = 10, nullable = false, unique = true) private String name; + @Enumerated(EnumType.STRING) + @Column(nullable = false) + @Builder.Default + private UserRole role = UserRole.ROLE_CLIENT; -// @Enumerated(EnumType.STRING) -// private UserRole role; - @Builder - public Users(String email, String password, String name /*UserRole role*/) { + public Users(String email, String password, String name, UserRole role) { this.email = email; this.password = password; this.name = name; -// this.role = role; + this.role = role; } // https://reflectoring.io/spring-security-password-handling/ diff --git a/src/main/java/com/api/user/repository/UserRepository.java b/src/main/java/com/api/user/repository/UserRepository.java index 27fee51..d5cba6e 100644 --- a/src/main/java/com/api/user/repository/UserRepository.java +++ b/src/main/java/com/api/user/repository/UserRepository.java @@ -3,6 +3,7 @@ package com.api.user.repository; import com.api.user.domain.Users; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Repository; @Repository