2010-08-25 2 views
1

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

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

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

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

ответ

1

Вы можете изменить 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-путь, и если он соответствует вашему шаблону, доставьте сообщение об ошибке или перенаправлении, которое вы хотите отправить.

+0

Мое приложение использует формы auth для аутентификации/авторизации повсюду, поэтому ему нужно знать URL-адрес реальной страницы входа, поэтому я не могу изменить URL-адрес страницы входа в web.config ... если я не понял что вы имели в виду ... – Andrey

+0

@Andrey: поведение перенаправления, когда пользователь не аутентифицирован, управляется из этого значения web.config. Вы можете поместить гиперссылки на свои страницы на настоящую страницу входа; этот подход просто заставит перенаправить движок для отправки пользователей на страницу с ошибкой. – kbrimington

+0

@ Андрей: Это неплохой подход, несмотря на понижение. Раньше я использовал его для хорошего эффекта. – kbrimington

Смежные вопросы