Какое действие выполняется как строго типизированный объект - PullRequest
0 голосов
/ 19 февраля 2009

Мне бы хотелось получить какой-то строго типизированный способ узнать, какое действие выполняет.

Чтобы уточнить, что я делаю AOP, где я разрешаю доступ к данному действию, только если у пользователя есть права на это действие.

Проблема с использованием строки для определения правила для проверки заключается в том, что если какой-либо разработчик переименует действие, я не получу ошибку компиляции, сообщающую, что мое правило нарушено.

Есть идеи ??

1 Ответ

1 голос
/ 19 февраля 2009

Разработайте атрибут, который выполняет вашу проверку. Примените атрибут со всеми необходимыми параметрами для действий, которые вы хотите защитить. Напишите модульные тесты, которые проверяют, что рассматриваемые действия существуют и украшены вашим атрибутом (с соответствующими параметрами). В вашем атрибуте вам не нужно знать, какое действие выполняется, просто проходит ли текущий пользователь тесты в соответствии с настройками параметров вашего атрибута.

У меня есть несколько различных атрибутов, которые я получил от AuthorizeAttribute, которые делают именно такие вещи.

 public class RequiresEmailAttribute : AuthorizeAttribute
 {
      ... implements the logic to test whether the current user
      ... has an email address and redirects to error view if no
      ... email address is found
 }

 [RequiresEmail]
 public ActionResult SendEmail( string to )
 {
    ....
 }
...