Spring Security OAuth2 + Угловая проверка доступа к элементам - PullRequest
0 голосов
/ 04 января 2019

Я использую 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?

...