2011-09-22 10 views
3

MVC3のコントローラのAuthorizeアトリビュートのWeb.Config AppSettingsセクションに値を使用する方法があるかどうか知りませんか?アトリビュートアトリビュートMVC 3&Web.Config AppSettings値

私は現在、web.configファイルでこのような何か使用しています:

<add key="AdminRole" value="Admins"/> 

をした後、私はクラスの中に引っ張り、承認属性に値を使用してみましたが、.NETは値が定数されていない文句

web.configで設定された値を使用して認可をフィルタして、異なる配備でシステム構成に基づいてさまざまなロール名を使用できるようにしたいだけです。

ありがとうございます、ありがとうございます!

答えて

5

実行時にweb.configから値を読み取る独自のAuthorizationAttributeクラスを作成する必要があります。 .NETでは、ランタイム依存の値を使用して属性を宣言することはできません。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
public class AuthorizeByConfig : AuthorizeAttribute 
{ 

    /// <summary> 
    /// Web.config appSetting key to get comma-delimited roles from 
    /// </summary> 
    public string RolesAppSettingKey { get; set; } 

    /// <summary> 
    /// Web.config appSetting key to get comma-delimited users from 
    /// </summary> 
    public string UsersAppSettingKey { get; set; } 


    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 

     if (!String.IsNullOrEmpty(RolesAppSettingKey)) 
     { 
      string roles = ConfigurationManager.AppSettings[RolesAppSettingKey]; 
      if (!String.IsNullOrEmpty(roles)) 
      { 
       this.Roles = roles; 
      }     
     } 

     if (!String.IsNullOrEmpty(UsersAppSettingKey)) 
     { 
      string users = ConfigurationManager.AppSettings[UsersAppSettingKey]; 
      if (!String.IsNullOrEmpty(users)) 
      { 
       this.Users = users; 
      }     
     } 

     return base.AuthorizeCore(httpContext); 
    } 


} 

そしてそうのようなあなたのコントローラクラスやメソッドを飾る:

Authorize.RolesとAuthorize.UsersはのappSettingsをweb.configファイルされている
[AuthorizeByConfig(RolesAppSettingKey = "Authorize.Roles", UsersAppSettingKey = "Authorize.Users")] 

ここ

+0

これは過度のようです。 MVCで使用する特定のロール名を作成するインストール要件を作成する方が良いと思いますか? – M4V3R1CK

+0

@ M4V3R1CKでは、カスタム認可属性は重くありません。 http://msdn.microsoft.com/en-us/library/ee707357(v=vs.91).aspx –

+1

誰かがMVCがWindowsの役割を認識しない場所に出くわしたことがありますか?私はその役割がWindowsのグループに変換されたと思ったが、ユーザーにグループを追加する何らかの理由で、そのuser.IsInRole( "GroupJustAddedTo")が常にfalseを返す場合は、MVC(Windows認証を使用)をチェックインします。私はなぜ考えているのかわかりません.... Windows 2003 R2でWindows認証を有効にして作業しています。混乱しました:〜(??? – M4V3R1CK

4

は、実施例です。

関連する問題