Пожалуйста не делайте это.
Если вам действительно нужно, вы можете использовать Type контроллера или MethodInfo действия для принятия решений по безопасности.Но основание всего на строках вызывает проблемы.Помните, что не существует гарантированного соответствия значений маршрутизации 1: 1 фактическому контроллеру.Если вы используете кортеж маршрутизации (a, b, c) для проверки доступа к SomeController :: SomeAction, но кто-то обнаруживает, что (a, b ', c) также выполняет то же действие, этот человек может обойти ваши механизмы безопасности.
Редактировать для ответа на комментарии:
У вас есть доступ к типу контроллера и MethodInfo действия через свойство ActionDescriptor параметра filterContext .Это единственный верный способ определить, какое действие будет действительно выполнять при обработке конвейера MVC, поскольку вполне возможно, что ваш поиск не совсем соответствует тому, что происходит за кулисами с MVC.Если у вас есть Type / MethodInfo / что угодно, вы можете использовать любую информацию, которую пожелаете (например, их полные имена), для принятия решений по безопасности.
В качестве практического примера рассмотрим область MyArea с контроллером FooController.и действие TheAction.Обычно способ, которым вы нажимаете этот FooController :: TheAction, заключается в следующем URL:
/ MyArea / Foo / TheAction
И маршрутизация дает кортеж (Area = "MyArea ", Controller =" Foo ", Action =" TheAction ").
Однако вы также можете нажать FooController :: TheAction по этому URL:
/ Foo / TheAction
И маршрутизация выдаст кортеж (Area = "", Controller = "Foo", Action = "TheAction").Помните, что области связаны с маршрутами, а не контроллерами.И поскольку контроллер может быть поражен несколькими маршрутами (если определения совпадают), то контроллер также может быть логически связан с несколькими областями.Вот почему мы говорим разработчикам никогда не использовать маршруты (или области или тег по расширению) для принятия решений по безопасности.
Кроме того, в вашем классе есть ошибка, заключающаяся в том, что он изменчив (он изменяет своиСобственность Роли в OnAuthorization).Атрибуты фильтра действий должны быть неизменяемыми, поскольку они могут кэшироваться частями конвейера и использоваться повторно.В зависимости от того, где этот атрибут объявлен в вашем приложении, это открывает временную атаку, которую посетитель вредоносного сайта может затем использовать для предоставления доступа к любому желаемому действию.
Для получения дополнительной информации см. Также мои ответы на: