Определение ролей в 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, может кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 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 немного решит второй тоже.
Ответ 2
Пожалуйста, взгляните на этот отличный пример, в котором автор рассказывает о проблеме, с которой вы столкнулись.
http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/