Расположение доступа в ASP.NET - PullRequest
1 голос
/ 25 августа 2010

У меня есть область администрирования моего сайта: http://www.mysite.com/webadmin, и я хочу защитить ее по роли (я использую аутентификацию форм ASP.NET), чтобы только пользователь с ролью "admin" мог получить доступЭто.В web.config я добавил эту запись:

<location path="WebAdmin">
    <system.web>
        <authorization>
            <deny users="*"/>
            <allow roles="admin"/>
        </authorization>
    </system.web>
</location>

, и она «вроде» работает - она ​​перенаправляет вас на страницу входа, если вы не в роли «admin».Но я не хочу этого, вместо этого я хочу показать страницу с ошибкой.В любом случае, я мог контролировать это поведение?

Спасибо, Андрей

1 Ответ

1 голос
/ 25 августа 2010

Вы можете изменить URL вашего файла считает страницей входа через web.config. (См. http://www.15seconds.com/issue/020220.htm.)

Подумайте о замене вашего пользовательского URL-адреса страницы с реальным URL-адресом в конфигурации.

Edit:

Подход web.config является жизнеспособным, если реализовать его как общее решение для всего виртуального каталога. (Попытка настроить пользовательские loginUrl для элемента <location> в web.config приведет к ошибке конфигурации.)

Вы можете иметь более точный контроль над этим поведением, введя такой код на своей странице администратора (или в базовый класс для страниц администратора):

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    if (!User.IsInRole("admin"))
    {
        Response.Redirect("~/ErrorPage.aspx?reason=denied");
    }
}

Вы также можете заняться созданием HttpModule или подключиться к вашему Global.asax, чтобы обрабатывать авторизацию в более общем смысле, не полагаясь на наследование страниц. См. http://msdn.microsoft.com/en-us/library/ms227673.aspx. Используйте событие BeginRequest для проверки пути URL-адреса и, если он соответствует вашему шаблону, передайте ошибку или перенаправление, которое вы хотите доставить.

...