2014-05-17 140 views
0

我想更改用戶的角色。改變用戶在數據庫中的角色。一切都基於Spring Security。通過userDetailsManager更改用戶角色

我的代碼:

UserDetails user = userDetailsManager.loadUserByUsername(userData.getUser().getUsername()); 

user.getAuthorities().add(new SimpleGrantedAuthority(role)); 

userDetailsManager.updateUser(user); 

錯誤:

Error:(99, 30) java: method add in interface java.util.Collection<E> cannot be applied to 
given types; 
    required: capture#1 of ? extends org.springframework.security.core.GrantedAuthority 
    found: org.springframework.security.core.authority.SimpleGrantedAuthority 
    reason: actual argument  
org.springframework.security.core.authority.SimpleGrantedAuthority cannot be converted to 
capture#1 of ? extends org.springframework.security.core.GrantedAuthority by method 
invocation conversion 

我不知道這是爲什麼錯誤。如何以其他方式改變用戶的角色?

+0

待辦事項SimpleGrantedAuthority延伸的GrantedAuthority?你能顯示它的代碼嗎? –

+0

是的,它實現了這個接口。 – mkjasinski

+0

嘗試 'GrantedAuthority ga = new SimpleGrantedAuthority(role); user.getAuthorities()。add(ga);' –

回答

1

您可以通過創建一個新的UserDetails更新給定用戶的角色從現有的一個,然後調用UserDetailsManager.updateUser()方法如下對象:

UserDetails oldDetails = userDetailsManager.loadUserByUsername(user); 
    UserDetails newDetails = new User(user, oldDetails.getPassword(), newRole); 
    userDetailsManager.updateUser(newDetails); 
1
  1. 的問題是,你可以將已知類型添加到保存未知類型的列表中。 (見https://stackoverflow.com/a/3716945/755183
  2. 用戶是不可改變的,所以爲了修改你應該克隆現有用戶,並使用新的角色
相關問題