2017-11-01 8 views
0

삭제할 사용자의 권한을 얻어야합니다. 내 시도는 다음과 같습니다.jitterster에서 사용자를 삭제할 때 권한을 얻으십시오.

@DeleteMapping("https://stackoverflow.com/users/{login:" + Constants.LOGIN_REGEX + "}") 
@Timed 
@Secured({AuthoritiesConstants.ADMIN, AuthoritiesConstants.LECTURER}) 
public ResponseEntity<Void> deleteUser(@PathVariable String login) { 
    log.debug("REST request to delete User: {}", login); 
    boolean hasAuthorityAdmin = false; 
    boolean hasAuthorityMember = false; 
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
    Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); 
    hasAuthorityAdmin = authorities.contains(new SimpleGrantedAuthority(AuthoritiesConstants.ADMIN)); 
    hasAuthorityMember = authorities.contains(new SimpleGrantedAuthority(AuthoritiesConstants.MEMBER)); 
    if (hasAuthorityAdmin) { 
     // delete user 
     userService.deleteUser(login); 
    } else { 
     if (hasAuthorityMember) { 
      // delete user if it is a student 
      if (**x**.contains(AuthoritiesConstants.STUDENT)) { 
       userService.deleteUser(login); 
      } 
     } 
    } 
    return ResponseEntity.ok().headers(HeaderUtil.createAlert("userManagement.deleted", login)).build(); 
} 

x 대신에 검색하는 방법이 필요합니까? 즉, 삭제할 권한을 검색해야합니다. 그래서 누구나 아이디어를 가지고 있습니다. 이것은 userResource.java 안에 있습니다. 누구든지 코드를 도와 줄 수 있습니까?

enter image description here

는 내가 회원으로 로그인하고 있다고 가정하자. 그럼 나는 학생을 지울거야. 따라서 학생 기록의 삭제 버튼을 클릭 할 때 메소드를 통해 ROLE_STUDENT를 가져올 수 있어야합니다.

+0

* x 대신 검색 할 방법이 필요합니다. * 검색 할 검색 방법이 필요합니까? –

+0

나는 누구든지 내가 삭제하려고하는 사용자에게 할당 된 권한 목록을 가져와야합니다. –

+0

나는 db에서 사용자 역할 정보를 가져와야한다고 생각합니다. 'SecurityContextHolder'는'ThreadLocal'과 묶여 있으므로 데이터베이스를 치지 않고 검색 할 방법이 없습니다. –

답변

1

이 그것을 수행해야합니다 UserService와

if (hasAuthorityMember) { 
    Optional<User> user = userService.getUserWithAuthoritiesByLogin(login); 
    Set<Authority> currentUserAuthorities = user.get().getAuthorities(); 
    for(Authority auth : currentUserAuthorities) { 
     // delete user if it is a student 
     if(auth.getName().equals(AuthoritiesConstants.STUDENT)) { 
      userService.deleteUser(login); 
     } 
    } 
} 

을, 당신은 로그인에 사용자 자신의 기관 감사를 얻고, (많은이있는 경우) 해당 기관의 각각에 대해, 우리는의 이름을 확인 권위. Student에 해당하는 경우 사용자를 삭제합니다.