19

フォーム認証を使用して MVC アプリケーションを作成しています。Active Directory に対して認証を行っているため、カスタム RoleProvider を作成しました。私のアプリケーションは、これまで web.config の appSettings セクションで定義してきたロールの小さなセットにのみ関係しています。

<appSettings>
  <add key="DirectorRole" value="Domain\Directors" />
  <add key="ManagementRole" value="Domain\Managers" />
  ...
</appSettings>

ただし、このアプローチではいくつかの問題に遭遇しました。

  1. コントローラーのデータ注釈でこれらの設定を参照できません。[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]コンパイルできないため、グループの名前を再度指定する必要があります: [Authorize(Roles = "Domain\\Directors")]
  2. 私の web.config では、ロール プロバイダーに groupsToUse を指定し、同じロール セットの 2 つの個別のリストを維持するのではなく、既存のリストを参照したいと考えています。

web.configでロールを定義するためのより良い/再利用可能な方法が必要なようです.誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

27

カスタム承認属性を使用することをお勧めします。このように。

public class MyAuthorizeAttribute : AuthorizeAttribute {

    public MyAuthorizeAttribute(params string[] roleKeys) {
        List<string> roles = new List<string>(roleKeys.Length);

        //foreach(var roleKey in roleKeys) {
            //roles.Add(ConfigurationManager.AppSettings["DirectorRole"]);
        //}
        var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles");
        foreach(var roleKey in roleKeys) {
            roles.Add(allRoles[roleKey]);
        }

        this.Roles = string.Join(",", roles);
    }
}

コントローラーで、次を使用します。

[MyAuthorize("DirectorRole")]

あなたのweb.configで

  <configSections>
    <section
      name="roles"
      type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <roles>
    <add key="DirectorRole" value="Domain\Directors" />
    <add key="ManagementRole" value="Domain\Managers" />
  </roles>

これで最初の問題がうまく解決されることを願っています。そして、少しひねると2番目の問題も解決します。

于 2012-07-18T11:35:58.777 に答える
0

あなたが直面している問題について著者が語っているこの素晴らしい例を見てください。

http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/

于 2012-07-18T10:56:55.877 に答える