0

私は新しいプロジェクトを開始しています。ASP.Net MVC 3を使用したカスタムロールプロバイダに関する質問があります。ASP.NETカスタムロールプロバイダ:コンテキストに応じてロール?

私のコンストラクタのいくつかのアクションについてロール検証が必要です。大丈夫、私は役割のプロバイダを使用することができます。

問題は役割が現在の「コンテキスト」に依存していることである。実際には、私のデータベース内のユーザーが複数の「実体」にリンクされている

、及びエンティティXの役割「A」を持っている、とエンティティYのロールBです。表示/編集されるすべてのデータは、このエンティティの「子」です

厳密に分かれています。ログインするときは、どのエンティティを作業したいのかを選択する必要があります私たちはエンティティの変更を求めるまで、このエンティティのデータとこのエンティティの権利のみを持ちます。

現在の「エンティティ」はセッションに格納されます。

目標は、エンティティXには、不正のメニュー/アクションを持たないことであり、この権利は、ユーザーY.に許可されたという理由だけで

問題は、ロールプロバイダに、私はいずれかを受信するための手立てをしたということですコンテキスト、私はユーザー名のみを受け取ります。

私は何ができると思いますか?(それが役立つ場合は、メンバーシップもカスタムメンバーシッププロバイダです)。

答えて

0

これらの特定のページへのアクセスをブロックするには、アクションに対してRoleManagementFilterを実装できます。これにより、従業員ロール、管理ロールのユーザーのみが特定のページにアクセスできるようになります。

[RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)] 
Public ActionResult EmployeeSettings(){ 
    return View(); 
} 
のActionFilterをルートとアクションにリダイレクトするかのページを要求するユーザの役割に基づいていない何

あなたがルート=「アカウント」を設定し、アクション=「ログオン」またはそれらを許す。

以下はActionFilterAttributeの一部です。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string[] roles = Roles.GetRolesForUser(); 
     string userrole = ""; 

     if (roles.Length > 0) 
      userrole = roles[0]; 

     if (Regex.IsMatch(userrole, Role)) 
      filterContext.HttpContext.Response.Redirect(redirectUrl(), true); 
    } 

私はあなたが持っているかかもしれ実体を知らない、それはfeasableであるかどうかが、あなたはあなたがアクションであなたの制限をベース可能性があり、それらの役割にユーザーを添付し、各エンティティのロールを作成した場合ユーザーがRoles.GetRolesForUser()にある場合。

MSDNのre-actionフィルタhttp://msdn.microsoft.com/en-us/magazine/gg232768.aspxが役に立ちました。そこにあなたを助ける希望がたくさんあります。

関連する問題