[Java][JHipster]ユーザの権限を判定する
はじめに
今回はユーザの権限を判定し、admin権限の場合は全ユーザのデータを表示し、それ以外の権限の場合はログインしたユーザに紐づくデータのみを表示する機能を実装していきます。
今回実装する機能について
前回のScaffoldで作成した記事の一覧について、admin権限の場合は全記事を、それ以外はログインユーザの記事のみを表示します。
adminでログイン
admin以外でログイン
実装について
ログインしたユーザの権限を判定して取得するデータを全件 or ユーザに紐づくデータのみに切り替えます。これらの処理はサーバ側のコントローラで行います。
/src/main/java/org/jhipster/web/rest/ArticleResource.java
(前略) /** * GET /articles : get all the articles. * * @return the ResponseEntity with status 200 (OK) and the list of articles in body */ @GetMapping("/articles") @Timed public List<Article> getAllArticles(Principal principal) { log.debug("REST request to get all Articles"); if(isAdmin(principal)){ return articleRepository.findAll(); }else{ return articleRepository.findByUserIsCurrentUser(); } } (中略) private boolean isAdmin(Principal principal){ Authentication authentication = (Authentication) principal; User user = (User) authentication.getPrincipal(); for(GrantedAuthority authority : user.getAuthorities()){ if(authority.getAuthority().equals("ROLE_ADMIN")) return true; } return false; }
isAdmin()メソッドを追加してログインユーザがadmin権限かどうかを判定しています。admin権限の場合はarticleRepository.findAll()を呼び出して全件取得、そうでない場合はarticleRepository.findByUserIsCurrentUser()を呼び出してログインユーザのデータのみを取得します。ちなにみarticleRepository.findByUserIsCurrentUser()についてはscaffold時に作成されたメソッドです。
ログインユーザの権限の判定方法についてはisAdmin()メソッドを参考にしてください。
まとめ
ログインユーザの権限の判定とそれによる表示するデータの切り替えというのは良くありそうな要件だと思いますが、割と簡単に実装できることが分かりました。