許可システムのオーバーホールが必要なアプリケーションを持っています。
このアプリケーションには、保護が必要な 2 種類の「エンティティ」があります。
- ユーザー
- 企業
ユーザーは単純で、アプリケーション内の領域へのアクセスを許可するロールを持っているだけで、データは変更されません。
企業は、管理 (現在は製品を所有する単なる「マスター」企業)、パートナー (製品の再販業者)、および標準 (製品を使用しているだけの人) の 3 つのタイプのいずれかになります。
この製品には、企業の「グループ」という概念もあります。再販業者は製品を別の名前で販売できますが、すべてのデータを一度に表示できる必要があるからです。したがって、各会社は常にグループに属し、各グループは会社によって所有されます。
データをクエリするとき、いくつかの要件があります。
- 再販業者 A に属するユーザーがデータをクエリすると、再販業者が所有するすべてのグループのすべての会社が表示される必要があります。
- 標準的な会社 B に属するユーザーがデータをクエリすると、自分の情報のみが表示されます。
- 管理会社 C に所属するユーザーがデータをクエリすると、すべてが表示されるはずです。
- 最後に、表示される実際のデータを会社の種類でフィルター処理する必要があります。管理会社は再販業者よりも多くのデータを参照し、再販業者は標準的な会社よりも多くの情報を参照します。
さて、現在のシステムは実際にこれのほとんどを行っていますが、それはたくさんあります:
List<int> groups;
if(CompanyType == CompanyType.Reseller){
groups = [some list of groups]
}else{
....
}
これはかなり醜く、エラーが発生しやすいものです。
SubSonic、WCF (システム全体が REST インターフェイスで設計されています)、PostSharp、および C# を使用しているため、利用可能なツールをご存じでしょう。
制限が適切かつ自動的に設定されるように、フレームワーク レベルでこのレベルの詳細 (基本的に行と列) でアクセス許可を実装する良い方法を誰かが提案できますか?