私は、WCF サービスを介してすべてのビジネス ロジックを利用できる多層システムを使用しています。
ここで、次のシナリオを検討してください。
- ユーザーが Web アプリケーション (ASP.NET MVC 4) を開き、WCF サービスからエンティティを要求します。
- WCF サービスがデータベースからエンティティを読み取ります (NHibernate を使用)
- エンティティはセキュリティ レイヤーを通過し、ユーザーがこのエンティティの特定のフィールドを表示してはならないことがわかります。
- プレゼンテーション レイヤー (それが何であるかは関係ありません。Web アプリ、モバイル アプリ) は通常、ユーザーのセキュリティ権限を認識する必要はありません。プレゼンテーション層は、サービスから受け取ったすべてのフィールドを取得してレンダリングします。
サービスのエンティティから不要な情報を取り除き、サービスが返したくないエンティティ フィールドをプレゼンテーション レイヤーが認識しないようにするにはどうすればよいですか? これを達成するためのベストプラクティスは何ですか?
DTO (データ転送オブジェクト) を使用する必要があると思いますが、厳密に定義することはできません。セキュリティ レイヤー (または他のフィールド フィルタリング システム) が開始されるまで、どのユーザーが各フィールドにアクセスできるかがわからないためです。