Какое действие выполняется как строго типизированный объект
-
05-09-2019 - |
Вопрос
Мне бы хотелось иметь возможность получить какой-нибудь строго типизированный способ узнать, какое действие выполняется.
Чтобы уточнить, я выполняю AOP, где я разрешаю доступ к данному действию только в том случае, если у пользователя есть права на это действие.
Проблема с использованием строки для определения, какое правило проверять, заключается в том, что если какой-либо разработчик переименует действие, я не получу ошибку компиляции, сообщающую мне, что мое правило нарушено.
Есть какие-нибудь идеи??
Решение
Разработайте атрибут, который выполняет вашу проверку.Примените атрибут со всеми необходимыми параметрами к действиям, которые вы хотите защитить.Напишите модульные тесты, которые проверяют, что рассматриваемые действия существуют и оформлены вашим атрибутом (с соответствующими параметрами).В вашем атрибуте вам не нужно знать, какое действие выполняется, достаточно знать, проходит ли текущий пользователь тесты, настроенные параметрами вашего атрибута.
У меня есть пара различных атрибутов, которые я получил из 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 )
{
....
}