Я пытаюсь использовать новый MVC4 DbDataController, чтобы разоблачить неудовлетворительные данные api.Авторизовать Атрибут не фильтруется на DbDataController
Моя проблема заключается в том, чтобы обеспечить это. Я создал атрибуты пользовательских авторизации, которые проистекают из Авторизоваться Атрибут
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, и она не вызвана.
Я уверен, что Скотт Гатри сказал, что это сработает. Я делаю это неправильно или мне нужен совершенно другой метод для их защиты?
Спасибо за ответ. Это немного отличается от System.Web.Mvc.AuthorizeAttribute. В этом нет ничего об этом, кроме краткого сообщения о его существовании. Мой первый вопрос: будет ли этот тип атрибутов работать и на мои обычные действия mvc? Или мне понадобится дублирующий класс атрибутов авторизации? – GeekyMonkey
В бета-версии да, вам понадобятся типы атрибутов, один для контроллеров MVC, другой для контроллеров API. Мы смотрим на улучшение этого в сокращении enxt. – marcind
Я решил обойти проблему, создав пользовательский RoleProvider, а затем положив это на вершину своего DbDataController 'using AuthorizeAttribute = System.Web.Http.AuthorizeAttribute;' Теперь я могу поместить это в действие моих данных (или класс) '[Авторизовать (Роли =« СуперAdmin »)]' Он не делает все, что мне нужно, но это начало. В некоторых случаях мне нужно будет найти запись пользователя, чтобы проверить, могут ли они получить доступ к определенным записям, поэтому это не приведет к ее сокращению. Было бы намного лучше, если бы те же фильтры MVC, которые у нас были, будут работать с этими новыми контроллерами. – GeekyMonkey