Как обработать перенаправление .net Role Provider? - PullRequest
1 голос
/ 05 января 2012

У нас есть специальный поставщик ролей ASP.NET, реализованный на нашем веб-сайте (.net4, IIS 7.5, VS 2010, все довольно неплохо).Мой вопрос заключается в том, как обработать или перехватить переадресацию поставщика ролей, когда пользователю отказано в доступе к странице?

Позвольте мне прояснить ситуацию.Поставщик ролей работает правильно.Мы создали файлы web.config в различных подкаталогах нашего веб-сайта, которые добавляют соответствующие элементы / атрибуты для доступа.Допустим, я пытаюсь получить доступ к странице в подкаталоге, для которого у меня нет роли ... прямо сейчас поставщик ролей перенаправляет меня на нашу страницу входа в систему (предположительно, отбрасывая значения web.config для нашего поставщика членства какхорошо).

Однако я хочу перенаправить пользователя на пользовательскую страницу «Отказано в доступе», а не на страницу входа в систему.

Основываясь на результатах многих поисковых запросов Google,Я попробовал несколько вещей, которые просто не работали.

Например, один человек предложил добавить собственный метод Application_Error в файл global.asax.Попробовал это, он никогда не попадал.

Также попытался добавить в раздел customErrors в web.config:

<error statusCode="401" redirect="AccessDenied.aspx" /> 

Опять же, это никогда не работало.

Как много точек отладки я установил, лучшее, что я могу сказать, это то, что поставщик ролей выполняет свою работу намного раньше, чем я могу перехватить, и автоматически перенаправляет на нашу страницу входа в систему.1017 * Буду очень признателен за любые мысли о том, как это перехватить.

Спасибо.

1 Ответ

1 голос
/ 05 января 2012

Когда пользователь не имеет доступа из-за чего-то в базе данных, он перенаправляется на loginUrl, указанный в элементе конфигурации формы как:

<forms loginUrl="login.aspx" />

Единственный элемент, который я имею в виду, это то, что если вы находитесь на странице входа в систему, свойство this.User.Identity.IsAuthenticated имеет значение true, пользователь попал туда, потому что он был перенаправлен по одной из этих проблем. Итак, вы можете перенаправить на страницу AccessDenied.aspx. Это будет работать, если аутентифицированный пользователь перенаправляется ТОЛЬКО для входа в систему для отказа. В противном случае, если вам нужно отправить их в разные места, единственное, о чем я могу подумать, это сбросить встроенную функцию перенаправления, в global.asax, добавить обработчик Application_AcquireRequestState или в какой-то другой момент (в зависимости от того, вам нужен доступ к сеансу или нет), проверьте права пользователя и перенаправьте их соответствующим образом (через HttpContext.Current.Response.Redirect).

...