Java、デザインパターン:ユースケースとアクターのマネージャー

hasanghaforian

プロジェクトには、3つのアクター(ユーザー、エキスパート、管理者)と5つの主要なユースケース(CRUD:作成、読み取り、更新、削除、同期)があります。ただし、各ユースケースへのユーザーのアクセスは他のアクターとは異なります。たとえば、ユーザーは1つのエンティティを作成できますが、エキスパートと管理者は任意の数を作成できます。

ここに画像の説明を入力してください

また、アクターは同じUIを使用するため、実行時に現在のアクターに対してアクションを有効にするか無効にするかを決定する必要があります。それは簡単に思えますが、優れたデザインが好きです。特に、ユースケース、アクターの数そのため、OCPの原則を尊重する必要がありますが、ユースケースとアクターのアクセス権レベルを管理するための優れた設計をどのように行うことができますか?

vrudkovsk

Javaには、非常にシンプルで強力なセキュリティのアイデアが付属しています。プリンシパル(ユーザー)はいくつかのアクセス許可を保持し、オブジェクト(エンティティ)は何らかの方法で処理するためにいくつかのアクセス許可を必要とする場合があります。

import java.security.Permission;
import java.security.Permissions;
import java.security.SecurityPermission;

public class PermissionFactory {
        public static Permission createOneEntity() {
            return new SecurityPermission("entity.create.one");
        }
        public static Permission createManyEntities() {
            return new SecurityPermission("entity.create.many");
        }
        public static Permission deleteEntity(Entity e) {
            return new SecurityPermission("entity.delete." + entyty.getOwnerId());
        }   

        public static Permission deleteMyEntity(User owner) {
            return new SecurityPermission("entity.delete." + user.getId());
        }   
        public static Permission deleteAnyEntity() {
            return new SecurityPermission("entity.delete.*"); // * is a placeholder for 'any'
        }   
    }

public class User {
    private final Permissions permissions  = new Permissions();

    public void addPermission(Permission p) {
        if(p != null) {
            this.permissions.add(p);
        }
    }
    public boolean hasPermission(Permission p){
        return permissions.implies(p);
    }
}

ユーザーを作成するときに、ユーザーのアクセス許可を一緒に保存できます。

User admin = new User(); 
admin.addPermission(PermissionFactory.deleteAnyEntity());
User regular = new User();
regular.addPermission(PermissionFactory.deletyMyEntitiy(tregular);

そして最後に、保護されたアクションを実行する必要がある場合は、プリンシパルにそれを実行するのに十分な権限があるかどうかを尋ねることができます。

Entity object = ...;
if(regular.hasPermission(PermissionFactory.deleteEntity(object)) {
delete object
}

たとえば、「アクション」と「エンティティタイプ」の概念を追加すると、インターフェイスを開くことができます。その後、PermissionFactoryの静的メソッドの代わりに、いくつかのアクセス許可ビルダーインターフェイスを提供します。しかし、とにかくセキュリティモデルとOCPは互いに直交しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Xfceデスクトップマネージャーのユーザーアカウントインターフェイスマネージャーの欠如

分類Dev

プロジェクトマネージャーパッケージのAtomエディターアイコンクラスとは何ですか?

分類Dev

スーパーユーザーをログインできません(カスタムユーザーモデル/マネージャー)

分類Dev

ユーザーごとに個別のタスクマネージャー

分類Dev

このユースケースの任意のデザインパターン

分類Dev

ユーザーの入力に基づくアコーディオンパネルのカスタマイズ

分類Dev

どのデザインパターンは、マネージャークラスの代わりに使用することができますか?

分類Dev

クラウドFoundryのインスタンスにパッケージマネージャを使用します

分類Dev

ターミナルマネージャーとパッケージマネージャーの両方で、LinuxMintにパッケージをインストール/アップグレードできません

分類Dev

シーケンシャルデータのクイックソートとマージソートのパフォーマンスは、ディスク上のアクセスシーケンシャルデータにスロー対メモリ内に収まります

分類Dev

PolymerアプリのFirebaseデータベース構造-パフォーマンスとユーザー/グループ/パブリックアクセス

分類Dev

GKEクラスターオートスケーラーとマネージドインスタンスグループのオートスケーリング

分類Dev

Windowsクレデンシャルマネージャーの使用時にユーザー名とパスワードを切り替える

分類Dev

MapReduceデザインパターンのマッパークラスとリデューサークラス

分類Dev

ユーザーごとの単一インスタンスとJavaアプリケーション

分類Dev

マインスイーパのデザインパターン

分類Dev

ユーザーごとのデータベースパターンとCloudant

分類Dev

同じアプリケーションコードの複数のデータソース、エンティティマネージャーとのトランザクションを管理します

分類Dev

asusルーターにパッケージマネージャーをインストールする

分類Dev

ASP .NetCoreプロジェクトのサービスマネージャーとしてec2インスタンスにスーパーバイザーをインストールできません

分類Dev

アップデータマネージャーからパッケージをインストールできません

分類Dev

マテリアルデザインスタイルのGridViewのインジケーター付きの高速スクロールバー

分類Dev

カスタムレイアウトマネージャーのスクロール/アニメーション

分類Dev

Terraformユーザーデータパスインスタンスの詳細

分類Dev

Windows 10 タスク マネージャー スロット インジケーター

分類Dev

Javaデザインパターン-ビジネスデリゲート

分類Dev

twitteRパッケージからTwitterのユーザーリストからのデータマイニングへのuserTimelineのスクリプト作成、リスト内の欠落しているユーザーの説明

分類Dev

マップチャネルのデザインパターン?

分類Dev

シングルユーザーデータベースとマルチユーザーデータベース

Related 関連記事

  1. 1

    Xfceデスクトップマネージャーのユーザーアカウントインターフェイスマネージャーの欠如

  2. 2

    プロジェクトマネージャーパッケージのAtomエディターアイコンクラスとは何ですか?

  3. 3

    スーパーユーザーをログインできません(カスタムユーザーモデル/マネージャー)

  4. 4

    ユーザーごとに個別のタスクマネージャー

  5. 5

    このユースケースの任意のデザインパターン

  6. 6

    ユーザーの入力に基づくアコーディオンパネルのカスタマイズ

  7. 7

    どのデザインパターンは、マネージャークラスの代わりに使用することができますか?

  8. 8

    クラウドFoundryのインスタンスにパッケージマネージャを使用します

  9. 9

    ターミナルマネージャーとパッケージマネージャーの両方で、LinuxMintにパッケージをインストール/アップグレードできません

  10. 10

    シーケンシャルデータのクイックソートとマージソートのパフォーマンスは、ディスク上のアクセスシーケンシャルデータにスロー対メモリ内に収まります

  11. 11

    PolymerアプリのFirebaseデータベース構造-パフォーマンスとユーザー/グループ/パブリックアクセス

  12. 12

    GKEクラスターオートスケーラーとマネージドインスタンスグループのオートスケーリング

  13. 13

    Windowsクレデンシャルマネージャーの使用時にユーザー名とパスワードを切り替える

  14. 14

    MapReduceデザインパターンのマッパークラスとリデューサークラス

  15. 15

    ユーザーごとの単一インスタンスとJavaアプリケーション

  16. 16

    マインスイーパのデザインパターン

  17. 17

    ユーザーごとのデータベースパターンとCloudant

  18. 18

    同じアプリケーションコードの複数のデータソース、エンティティマネージャーとのトランザクションを管理します

  19. 19

    asusルーターにパッケージマネージャーをインストールする

  20. 20

    ASP .NetCoreプロジェクトのサービスマネージャーとしてec2インスタンスにスーパーバイザーをインストールできません

  21. 21

    アップデータマネージャーからパッケージをインストールできません

  22. 22

    マテリアルデザインスタイルのGridViewのインジケーター付きの高速スクロールバー

  23. 23

    カスタムレイアウトマネージャーのスクロール/アニメーション

  24. 24

    Terraformユーザーデータパスインスタンスの詳細

  25. 25

    Windows 10 タスク マネージャー スロット インジケーター

  26. 26

    Javaデザインパターン-ビジネスデリゲート

  27. 27

    twitteRパッケージからTwitterのユーザーリストからのデータマイニングへのuserTimelineのスクリプト作成、リスト内の欠落しているユーザーの説明

  28. 28

    マップチャネルのデザインパターン?

  29. 29

    シングルユーザーデータベースとマルチユーザーデータベース

ホットタグ

アーカイブ