2012-08-29 5 views
6

私のasp.net MVCプロジェクトにロールマネージャとウィンドウ認証を使用しています ビューアとエディタである2つのロールがあります。Asp.net MVCロールマネージャ

<authentication mode="Windows" /> 
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"> 
     <providers> 
      <clear /> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 

Editorは、アプリケーション全体にアクセスすることができますが、ビューアは、私は最初だけで、エディタがすべてにアクセスすることを可能にするベースコントローラのための承認属性を入れてみました2つのアクション

のみアクセスすることができます。

[Authorize(Roles = "Editors")] 
public class BaseController : Controller 

をし、これら2つのアクションにAuthorize属性を追加します。

[Authorize(Roles = "Viewers,Editors")] 
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 

それは動作しません、それは今視聴者が何らかのアクションにアクセスすることを許可しません。

各アクションの先頭にAuthorize属性を繰り返すことはお勧めできません。あなたは木の観点からこれを見なければならないこと

答えて

5

へのよりよい解決策があるかどう

あなたは私に教えてもらえます。アクションに到達するには、まずコントローラにアクセスできる必要があります。この場合、コントローラはエディタグループに制限されているため、視聴者は遠く離れた場所にいることさえできません。ほとんどの場合、コントローラーをViewers, Editorsに制限してから、エディターのみのアクセス許可が必要なアクションでは、コントローラーを指定することをお勧めします。これにより、冗長な属性が生成されますが、ロールのメンバシップに基づいて各アクションを手動で制限する必要がある場合は、コードコストを考慮してください。

[Authorize(Roles = "Viewers, Editors")] 
public class BaseController : Controller 
{ 

    [Authorize(Roles = "Editors")] 
    public ActionResult EditReport(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some editor only functionality 
    } 

    public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some functionality for both. No attribute needed 
    } 
} 
+0

編集者は、すべてのアクションにアクセスすることができますので、あなたの答えのおかげで、私は、各アクションの上に認可繰り返さない期待していたが、それは他の方法 – Elham

+0

@Elhamが存在しないようです:あなたは、常にSOこれを見ることができます拒否属性を質問し、実装する。これは、メソッドの属性をタイプアウトしたくないので、単純に多くの作業のように思えます。 http://stackoverflow.com/questions/4011458/mvc-authorize-attribute-deny –