2015-06-01 1 views
1

Я пишу действие контроллера, к которому может обратиться одна из двух групп пользователей; каждая группа имеет свою собственную реализацию AuthorizationFilterAttribute, содержащую пользовательскую логику, определяющую, как группа будет авторизована. Я хочу иметь возможность использовать условное ИЛИ, чтобы определить, что был выполнен хотя бы один из фильтров авторизации атрибутов.Условное ИЛИ с AuthorizationFilterAttributes в ASP.NET Web API 2

Я надеялся, что я мог бы сделать что-то вроде этого:

public class ConfigController : ApiController 
    { 
     [AdminAuthorize || DealRoomAuthorizeAttribute] 
     public IHttpActionResult GetBlah() 
     { 
      return Ok(); 
     } 
    } 

но не повезло! Любые идеи о том, как это может быть достигнуто?

+1

Обычно определить единый класс для всех членов и использовать параметры конструктора, чтобы различить, кто имеет доступ. Это позволяет вам определить набор параметров конструктора, который допускает логику OR. [Вот пример] (http://stackoverflow.com/questions/700166/allow-multiple-roles-to-access-controller-action) – Guvante

ответ

1

Вы не можете выполнить ИЛИ напрямую из-за того, как работают атрибуты авторизации: они «разрезают» конвейер, если авторизация завершается с ошибкой, поэтому, если первая не удалась, она остановит конвейер, а другая не будет шанс быть выполненным.

Вам необходимо реализовать свой собственный атрибут авторизации, который делает OR самостоятельно. Это очень просто реализовать, потому что вам просто нужно повторно использовать логику существующих атрибутов. Фактически, вы можете наследовать один из них и переопределить полученные методы, по крайней мере, OnAuthorization, повторно используя логику выхода.

Подробнее:

Смежные вопросы