JHipsterでの新しいロールと権限の作成

1. 概要

link:/jhipster[JHipster]には、USERとADMINの2つのデフォルトロールがありますが、独自のロールを追加する必要がある場合があります。
このチュートリアルでは、ユーザーに追加の特権を提供するために使用できるMANAGERという名前の新しいロールを作成します。
  • JHipsterは_authorities_という用語を_roles_ *と多少交換可能に使用していることに注意してください。 いずれにしても、基本的に同じことを意味します。

2. コードの変更

新しいロールを作成するための最初のステップは、クラス__ *を更新することです。 このファイルは、新しい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にも同様の構成が存在することに注意してください。
まず、テンプレート内のすべての要素で__ディレクティブを使用できます*。 単一の文字列または文字列の配列を受け入れます。
<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にアクセスできるユーザーと、フロントエンドで表示できるデータをより詳細に制御できます。
いつものように、コードはhttps://github.com/eugenp/tutorials/tree/master/jhipster/jhipster-monolithic[GitHub]で入手できます。