ASP.NET MVC 2 でフランチャイズ サービス ビジネス用の Web ベースの CRM + CMS の 2 番目のイテレーションを構築しています。ユーザーがそのフランチャイズに割り当てられている役割に基づいて、各フランチャイズのサービスへのアクセスを制御する必要があります。
4 つの例:
Receptionist
彼女の「Atlantic Seaboard」フランチャイズのサービスの仕事を予約できるはずですが、レポートを作成することはできません。Technician
サービス ジョブを変更できる必要がありますが、請求書を変更することはできません。Managers
店舗内のジョブの請求書に割引を適用できる必要があります。Owner
彼が所有するフランチャイズのレポートを取得できるはずです。
フランチャイズ レベルのアクセス制御は、Data - Services - Web
層の間のどこに収まるべきですか?
それが私のコントローラーに属している場合、どのように実装するのが最適ですか?
部分スキーマ
Roles
クラス
int ID { get; set; } // primary key for Role
string Name { get; set; }
部分Franchises
授業
short ID { get; set; } // primary key for Franchise
string Slug { get; set; } // unique key for URL access, eg /{franchise}/{job}
string Name { get; set; }
UserRoles
マッピング
short FranchiseID; // related to franchises table
Guid UserID; // related to Users table
int RoleID; // related to Roles table
DateTime ValidFrom;
DateTime ValidUntil;
コントローラーの実装
[Authorize]
属性によるアクセス制御
関係するフランチャイズが 1 つだけの場合は、コントローラー アクションへのアクセスを次のように単純に制限できます。
[Authorize(Roles="Receptionist, Technician, Manager, Owner")]
public ActionResult CreateJob(Job job)
{
...
}
フランチャイズは一夜にして出現するわけではないので、おそらくこれはASP.NET MVC 2の新しいエリア機能を使用する強力なケースでしょうか? または、これはビューの重複につながりますか?
コントローラー、URL ルーティング & エリア
エリアが使用されていないと仮定すると、どのフランチャイズのデータがアクセスされているかを判断する最良の方法は何ですか? 私はこれについて考えました:
{franchise}/{controller}/{action}/{id}
または、詳細(...)アクションでジョブのフランチャイズを決定し、[承認]でユーザーのアクションを制限する方が良いですか:
{job}/{id}/{action}/{subaction}
{invoice}/{id}/{action}/{subaction}
{franchise} パラメータで URL を乱雑にすることなく、ユーザーが複数のフランチャイズにアクセスできる可能性がある場合、これはより理にかなっています。
どんな入力でも大歓迎です。
編集:
バックグラウンド
従来の ASP で以前の CRM を構築したところ、ビジネスは順調に進みましたが、ワークフローを高速化し、エラーの余地を少なくするためにアップグレードする時期が来ました。適切なテストを行い、データとプレゼンテーションをより適切に分離するために、Rob Conery の MVC Storefront シリーズに見られるようなリポジトリ パターンを実装することにしました。
サービスとリポジトリの配置方法は?
JobService
利用可能なフィルタに基づいてサービス ジョブを取得する があることは理にかなっています。IQueryable<Job> GetJobs();
. しかし、ジョブは 1 つのフランチャイズにのみ属することができるため、 のような機能は、 または のIQueryable<Job> GetJobs(int franchiseID);
いずれFranchiseService
かに属することができJobService
ます。(MVC StorefrontFranchiseService
のように) として機能する必要がありますか?CatalogService