Подтвердить что ты не робот

Определение ролей в web.config приложения asp.net MVC

Я создаю приложение MVC с помощью форм auth. Я проверяю подлинность активного каталога и создал пользовательский RoleProvider. Мое приложение связано только с небольшим набором ролей, которые до сих пор я определял в разделе appSettings моего web.config:

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

Однако я столкнулся с несколькими проблемами с этим подходом:

  • Я не могу ссылаться на эти настройки в аннотациях данных контоллера: [Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])], поскольку он не компилируется, поэтому я должен снова указать имя группы: [Authorize(Roles = "Domain\\Directors")].
  • В моем web.config я хотел бы указать groupsToUse для моего поставщика ролей и просто ссылаться на уже существующий список, а не поддерживать два отдельных списка одного и того же набора ролей.

Кажется, что должен быть лучший/многоразовый способ определения ролей в web.config, может кто-нибудь указать мне в правильном направлении?

4b9b3361

Ответ 1

Я бы предпочел использовать специальный атрибут authorize. Как этот.

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>

Я надеюсь, что это решит вашу первую проблему просто отлично. И twiking немного решит второй тоже.