Атрибут Authorize не фильтруется на DbDataController - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь использовать новый MVC4 DbDataController для предоставления API успокоительных данных.

Моя проблема заключается в том, чтобы защитить это.Я создал пользовательские атрибуты авторизации, которые являются производными от атрибута Authorize

public class AdminOnlyAttribute : AuthorizeAttribute
{
  public override void OnAuthorization(AuthorizationContext filterContext)
  {
    if (!IsAllowed()) {
      filterContext.Result = new HttpUnauthorizedResult("Not logged in");
  }
  ...
}

, и это прекрасно работает применительно к моим обычным действиям контроллера.Я пытаюсь использовать то же самое в моей службе данных, как это:

[AdminOnlyAttribute]
public class DataServiceController : DbDataController<AppBuilderDataContext>
{
  [AdminOnlyAttribute]
  public IQueryable<Thing> GetThings()
  {
    return DbContext.AllMyThings();
  }
}

Вы можете видеть, что я пробовал свой атрибут как на контроллере, так и на действии, но он не срабатывает ни для одного из них.Я установил точку останова внутри своей функции атрибута authorize, и она не вызывается.

Я почти уверен, что Скотт Гатри сказал, что это сработает.Я делаю это неправильно или мне нужен совершенно другой метод для их защиты?

1 Ответ

3 голосов
/ 28 февраля 2012

Для работы с DataController или любым другим типом, производным от ApiController, ваш атрибут должен быть производным от System.Web.Http.AuthorizeAttribute

...