У меня есть приложение, в котором некоторые пользователи принадлежат к роли, но на самом деле могут не иметь доступа к определенным данным в URL. Например, следующий URL открыт для всех пользователей
/Library/GetFile/1
Однако некоторые пользователи могут не иметь доступа к файлу1, но я не могу использовать атрибут Authorize, чтобы обнаружить это. Вместо этого я хочу перенаправить этих пользователей на неавторизованную или закрытую страницу. Я использую проверку подлинности с помощью форм, и моя конфигурация настроена следующим образом
<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>
мой блок пользовательских ошибок похож на
<customErrors mode="On" defaultRedirect="Error" redirectMode="ResponseRewrite" >
<error statusCode="401" redirect="Unauthorized"/>
</customErrors>
Я пытаюсь вернуть HttpUnauthorizedResult, если у пользователя нет доступа, но я просто перенаправлен на страницу входа, которая здесь недопустима, поскольку пользователь уже аутентифицирован.
Похоже, что HttpUnauthorizedResult устанавливает для HTTP-кода ответа 401, который используется для проверки подлинности с помощью форм и отправки пользователя на страницу входа в систему.
Бросок UnauthorizedAccessException, кажется, не работает или всегда перенаправляет пользователя на страницу IIS Error, хотя я обновил мои RegisterGlobalFilters до
filters.Add(new HandleErrorAttribute
{
ExceptionType = typeof(UnauthorizedAccessException),
View = "Unauthorized",
Order = 3
});
Если я заменил UnauthorizedAccessException на пользовательское исключение, перенаправление сработает, и на данный момент это то, что я сделал.