2014-05-17 71 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. 用户是不可改变的,所以为了修改你应该克隆现有用户,并使用新的角色
相关问题