1. 概要

JHipster には、USERとADMINの2つのデフォルトの役割がありますが、独自の役割を追加する必要がある場合もあります。

このチュートリアルでは、MANAGERという名前の新しいロールを作成します。このロールを使用して、ユーザーに追加の特権を提供できます。

JHipsterは、権限という用語を役割とある程度同じ意味で使用していることに注意してください。 いずれにせよ、私たちは本質的に同じことを意味します。

2. コードの変更

新しい役割を作成するための最初のステップは、クラスAuthoritiesConstants更新することです。 このファイルは、新しいJHipsterアプリケーションを作成するときに自動的に生成され、アプリケーション内のすべての役割と権限の定数が含まれています。

新しいMANAGERロールを作成するには、このファイルに新しい定数を追加するだけです。

public static final String MANAGER = "ROLE_MANAGER";

3. スキーマの変更

次のステップは、データストアで新しい役割を定義することです。

JHipsterは、さまざまな永続データストアをサポートし、データストアにユーザーと権限を設定する初期セットアップタスクを作成します。

データベース設定に新しい役割を追加するには、InitialSetupMigration.javaファイルを編集する必要があります。 すでにaddAuthoritiesというメソッドがあり、既存のコードに新しい役割を追加するだけです。

public void addAuthorities(MongoTemplate mongoTemplate) {
    // Add these lines after the existing, auto-generated code
    Authority managerAuthority = new Authority();
    managerAuthority.setName(AuthoritiesConstants.MANAGER);
    mongoTemplate.save(managerAuthority);
}

この例ではMongoDBを使用していますが、手順はJHipsterがサポートする他の永続ストアと非常によく似ています。

H2などの一部のデータストアは、authorities.csvという名前のファイルのみに依存しているため、更新が必要な生成コードがないことに注意してください。

4. 私たちの新しい役割を使用する

新しい役割が定義されたので、コードでそれを使用する方法を見てみましょう。

4.1. Javaコード

バックエンドでは、ユーザーが操作を実行する権限を持っているかどうかを確認する主な方法が2つあります。

まず、特定のAPIへのアクセスを制限する場合は、SecurityConfigurationを変更できます。

public void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.MANAGER);
}

次に、アプリケーションのどこでもSecurityUtilsを使用して、ユーザーがロールに属しているかどうかを確認できます。

if (SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.MANAGER)) {
    // perform some logic that is applicable to manager role
}

4.2. フロントエンド

JHipsterには、フロントエンドでの役割を確認する2つの方法があります。 これらの例ではAngularを使用していますが、Reactにも同様の構成が存在することに注意してください。

まず、テンプレート内の任意の要素で*jhiHasAnyAuthorityディレクティブを使用できます。 単一の文字列または文字列の配列を受け入れます。

<div *jhiHasAnyAuthority="'ROLE_MANAGER'">
    <!-- manager related code here -->
</div>

次に、プリンシパルクラスは、ユーザーが特定の役割を持っているかどうかをチェックできます。

isManager() {
    return this.principal.identity()
      .then(account => this.principal.hasAnyAuthority(['ROLE_MANAGER']));
}

5. 結論

この記事では、JHipsterで新しい役割と権限を作成することがいかに簡単であるかを見てきました。 デフォルトのUSERおよびADMINロールは、ほとんどのアプリケーションにとって優れた出発点ですが、追加のロールはより柔軟性を提供します。

追加の役割により、どのユーザーがAPIにアクセスでき、どのデータをフロントエンドに表示できるかをより細かく制御できます。

いつものように、コードはGitHubで入手できます。