2013-04-19 6 views
0

Мне нужна область на моем веб-сайте, где могут просматривать только определенные пользователи.Аутентификация форм - подпапка Web.Config не работает

Что я сделал, это создать папку видео. Под этим словом у меня есть папки Один из них называется Login, а другой - WatchVid. В папке «Вход» у меня есть страница под названием Login.aspx. После того, как логины пользователей в они будут затем перейти к /WatchVid/Watch.aspx Ниже представление:

Video Folder 
     | 
     | 
     ----> Login Folder 
     |  | 
     |  | 
     |  ---> Login.aspx 
     | 
     ----> WatchVid Folder 
       | 
       | 
       --->Watch.aspx     

У меня есть следующий конфигурационный файл веб в моем WatchVid, чтобы только роли, которые имеют VidUser для просмотра страницы :

<?xml version="1.0"?> 
    <configuration> 
    <system.web> 
    <authorization> 
     <allow roles="VidUser" /> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
    </configuration> 

что я нахожу в том, что даже если я изменю:

 <allow roles="VidUser" /> 

    To: 

     <allow roles="VidUser1" /> 

Я все еще может попасть в эту страницу Watch.aspx хотя У меня нет роли VidUser1.

Я что-то не так?

Так же, как ссылка ниже код я использую один раз логинов пользователей в их идентификатору пользователя, PWD:

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     if (Roles.IsUserInRole(txtUserName.Text, "StreamingUser")) 
     { 
      const string url = "~/Video/WatchVid/Watch.aspx"; 
      Response.Redirect(url); 
     } 

Стефан, я следующий в моей странице корень web.config, но все же позволил мне получить на странице Watch.aspx:

 <location path="Video/WatchVid"> 
     <system.web> 
      <authorization> 
      <allow roles="StreamingUser1dfdfdfd" /> 
      <deny users="?" /> 
     </authorization> 
     </system.web> 
     </location> 

Обратите внимание, как я создал фиктивную роль StreamingUser1dfdfdfd просто чтобы проверить его. Я все еще могу попасть на страницу Watch.aspx.

Майк:

У меня есть следующие под моей папке WatchVid но получаю ошибку доступа, когда я делаю это с * - Любая идея? :

 <?xml version="1.0"?> 
    <configuration> 
    <system.web> 
    <authorization> 
     <allow roles="StreamingUser" /> 
     <deny users="*" /> 
     </authorization> 
    </system.web> 
    </configuration> 

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

Имейте в виду, что это по-прежнему работает:

 protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     if (Roles.IsUserInRole(txtUserName.Text, "StreamingUser")) 
     { 
     const string url = "~/Video/WatchVid/Watch.aspx"; 
     Response.Redirect(url); 
     } 

Но теперь он не будет препятствовать мне до страницы Watch.aspx как я получаю сообщение об ошибке.

ответ

0

Вы хотите изменить

<deny users="?"/> 

в

<deny users="*"/> 

* означает его отрицается всем. Затем ваш allow roles позволяет в правильных ролях.

? означает, что оно не разрешено пользователям, не прошедшим проверку подлинности. Поскольку вы прошли аутентификацию, вам не отказывают.

+0

Спасибо, Майк. Где я могу поместить свой web.config. Могу ли я поместить его в папку WatchVid, как сейчас? –

+0

@NatePet, это прекрасное место для его размещения. Я предпочитаю делать это таким образом, а не помещать его в корневую конфигурацию с помощью путей местоположения. – MikeSmithDev

+0

иногда это может быть так просто ... @MikeSmithDev прав. –

0

Используйте тег местоположения в самом внешнем (корневом) файле web.config.

EDIT, чтобы показать (адаптированный) рабочий пример одного из наших приложений:

<authorization> 
    <allow users="?" /> 
</authorization> 

<location path="Login.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

<location path="Videos/WatchVid"> 
    <system.web> 
    <authorization> 
     <allow roles="VidUser" /> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</location> 
+0

Спасибо, Стефан, я пробовал, но все еще не смотрю. Пожалуйста, смотрите выше. Я поставил комментарии выше с вашим именем для ссылки. Спасибо за вашу помощь –

+0

hmm. Я скопировал это из рабочего приложения. У вас есть общий тег авторизации с 'deny users = '?'' Missing? –

+0

Просто так, что я на той же странице, я забрал web.config, который был в моем WatchVid, и переместите код I с твиками, которые вы упомянули в корне. У меня все еще есть там, как вы можете видеть. Пожалуйста, дайте мне знать, правильно ли я делаю это. Как уже упоминалось, в качестве этого пункта у меня есть только 1 файл web.config, который находится в корне. –