2012-01-25 10 views
0

の不確実な私はセットアップにReisterGlobalFiltersをした私のGlobal.asaxの中にこのような方法:MVC 3:RegisterGlobalFilters行動

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 

    var testUsers = ConfigurationManager.AppSettings["testUsers"]; 

    if(!string.IsNullOrEmpty(testUsers)) 
    { 
     filters.Add(new AuthorizeAttribute{ Users = testUsers }); 
    } 
} 

このようなのWeb.Configからその値を読み取ります

<appSettings> 
    <add key="testUsers" value="DOMAIN\MyDomainAccount, DOMAIN\SomeoneElse" 
</appSettings> 

<appSettings> 
    <add key="testUsers" 
     xdt:Transform="Remove" xdt:Locator="Match(key)" /> 
</appSettings> 

のCe:

生産コンフィグ変換は、この行います問題は、デバッグモードでも、自分のドメインアカウントを使用して制限されたコントローラアクションにアクセスできないということです。 RegisterGlobalFiltersメソッドにデバッガを接続し、 "testUsers"の値にweb.configの正しい値が割り当てられています。

ここでは何が起こっていますか?

+0

ドメインアカウントは「DOMAIN \ Special Users Group」グループに属していますか? –

+0

いいえ、グローバルアクションフィルタを使用してドメインアカウントを追加すると、私にアクセスできるようになります。私は間違っていますか? – Didaxis

+0

はい、間違っています。私の答えを見てください。 –

答えて

1

web.configで定義したグローバル属性はOKです。デバッグでは、あなたは認証されます。しかし、あなたのアカウントがDOMAIN\Special Users Groupグループに属しておらず、単に承認を拒否しているため、コントローラのアクションに加えた他のAuthorize属性はあなたを許可しません。あなたは与えられたアクションに複数の認可属性を持つことができますが、認可を認める限りゲームオーバーです。

+0

Ok、dang。あなたは私がここで成し遂げようとしているものを見ています...このようなものを得る方法に関する提案はありますか? – Didaxis

+0

@ErOx、あなたのauthorize属性で、このハードコードされた 'Users =" DOMAIN \ Special Users Group "を参照してください。これはあなたを壊滅させるものです。これらの値は一定でなければならず、コンパイル時には、AuthorizeAttributeから派生したカスタムのauthorize属性を記述し、この値を 'web.config'から取得することができます。ですから、コントローラのアクションを '[MySpecialUsersAuthorize]'属性で飾るだけです。 –

+0

お手数ですが、ありがとうございます。 – Didaxis

関連する問題