[Java][JHipster]ユーザの権限を判定する

はじめに

今回はユーザの権限を判定し、admin権限の場合は全ユーザのデータを表示し、それ以外の権限の場合はログインしたユーザに紐づくデータのみを表示する機能を実装していきます。

今回実装する機能について

前回のScaffoldで作成した記事の一覧について、admin権限の場合は全記事を、それ以外はログインユーザの記事のみを表示します。

adminでログイン

jhipster-auth-1

admin以外でログイン

jhipster-auth-2

実装について

ログインしたユーザの権限を判定して取得するデータを全件 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()メソッドを参考にしてください。

まとめ

ログインユーザの権限の判定とそれによる表示するデータの切り替えというのは良くありそうな要件だと思いますが、割と簡単に実装できることが分かりました。

参考サイト

Spring BootとSpring Securityでユーザ認証(インメモリ&独自のユーザテーブル)