Проблема в том, что AuthorizeAttribute ожидает константу для строк User и Role. Вам нужно будет создать атрибут CustomAuthorizeAttribute, похожий на тот, который содержится в этом сообщении в блоге .
Допустим, у вас есть строка, которую вы храните в своем файле web.config, которая выглядит примерно так:
<add key="authorizedUsers" value="Dave,Chuck,Sally" />
и тогда у вас есть свой собственный атрибут авторизации, который будет выглядеть примерно так:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public IAuthorizationService _authorizationService { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
var users = System.Configuration.ConfigurationManager.AppSettings["authorizedUsers"].Split(',');
if users.Contains(user.Identity.Name)
{
return true;
}
return _authorizationService.Authorize(httpContext);
}
}
Обратите внимание, что я собрал это довольно быстро, чтобы он не тестировался. Вы можете легко изменить это, чтобы получать имена пользователей или групп из базы данных, чтобы они могли быть полностью динамическими.