Можно ли переопределить атрибут, который был применен на уровне контроллера для определенного метода? - PullRequest
1 голос
/ 31 июля 2009

Если я применил атрибут авторизации на уровне контроллера, возможно ли переопределить это одним из методов на этом контроллере?

Спасибо

Джеймс

Ответы [ 2 ]

1 голос
/ 31 июля 2009

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

Обновление в ответ на комментарии. Во-первых, создание собственного AuthorizeAttribute несколько опасно. AuthorizeAttribute содержит код, который взаимодействует с атрибутами кэширования, чтобы гарантировать, что кэш не может обслуживать защищенное содержимое неавторизованному пользователю. Как минимум, вы должны подтипировать существующий AuthorizeAttribute, а не создавать что-то совершенно новое. Однако, как правило, лучше использовать существующий AuthorizeAttribute и специализировать свою авторизацию, создав нового / найдя существующего поставщика членства ASP.NET.

Не думаю, что было бы неплохо создать фильтр для действия, которое "переопределяет" фильтр на контроллере. Однако вы можете изменить конструкцию фильтра на контроллере, чтобы не требовать авторизации для действия с определенным именем. Например, можно переопределить метод AuthorizeAttribute.AuthorizeCore, чтобы таким же образом проверить имя действия, как существующий метод проверяет имя пользователя и роли. Внимательно примите к сведению комментарии этого метода, касающиеся безопасности потоков.

0 голосов
/ 01 августа 2009

Я не уверен, что это точно такой же вопрос, но это может помочь ...

Как заставить ActionFilter для метода действия иметь приоритет над тем же ActionFilter на контроллере

...