Я использую Spring Boot 2
+ Spring Security
. Я создал простой AuthorizationServer
:
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfigJwt extends AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("sampleClientId")
.and()
.withClient("fooClientIdPassword").secret(passwordEncoder().encode("secret"))
.authorizedGrantTypes("password", "authorization_code", "refresh_token").scopes("read", "write")
.accessTokenValiditySeconds(3600) // 1 hour
.refreshTokenValiditySeconds(2592000);// 30 days
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints.tokenStore(tokenStore())
.authenticationManager(authenticationManager)
.accessTokenConverter(accessTokenConverter());
}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("as466gf");
return converter;
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
И я использую Angular
. В моем угловом приложении есть некоторые особенности, которые я хотел бы выделить пользователям. Например, администратор может создавать новости, а обычный пользователь - нет. Соответственно для администратора мне нужно отобразить кнопку добавления, а для всех остальных скрыть. Например:
<button type="button" id="add-news-btn" pButton icon="ui-icon-add" label="Add"
class="green-btn tool-btn" routerLink="/news/new"></button>
Но я не могу понять, как это сделать. На стороне бэкэнда я могу установить области действия и роль на контроллере следующим образом:
@PreAuthorize("#oauth2.hasScope('write') and hasRole('ROLE_ADMIN')")
Но как мне получить права пользователя на интерфейсе, чтобы я мог манипулировать html-элементами, такими как show или hide?