2008-12-04 2 views
5

Вот простой обзор моего макета каталога для моих просмотров:Предоставление доступа к конкретным страницам с ASP-MVC и Forms Authentication

Проект

  • Page 1
  • Page 2
  • RSS

Вопросы

  • Page 1
  • Page 2
  • RSS

Я использую проверки подлинности форм, чтобы запретить доступ ко всем непроверенным пользователям, что работает отлично. Тем не менее, я хочу иметь возможность предоставлять доступ к просмотрам RSS всем (чтобы они могли подписаться через Google Reader и прочее)

Я понимаю, что вы можете предоставить доступ к страницам, добавив следующую страницу в свой web.config

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

Однако, как бы я это сделать с моим динамически из URL, такие как:

Issues/RSS/chrisj 
  • Этот путь соответствует контроллеру в вопросах называется RSS, которая принимает имя пользователя и выплевывает RSS из тир вопросов ...

EDIT

Некоторые ответы я думал, что установил его, но:

Кажется, что в моем случае, по крайней мере, для просмотра страницы все еще требуется файл cookie для проверки подлинности. Вы можете выйти из системы и просмотреть его, если у вас есть файл cookie.

Это нехорошо для меня, мне нужна страница, чтобы быть полностью публичной, так как это RSS-канал.

ответ

3

Забудьте о местоположении <> < allow /> < deny /> stuff ... похоже, что вам нужно использовать атрибут [Авторизовать] для своих действий.

Проверьте эти страницы для получения дополнительной информации: http://www.asp.net/learn/mvc/tutorial-17-cs.aspx http://www.pnpguidance.net/post/ASPNETMVCFrameworkPreview4HandleErrorAuthorizeOutputCacheActionFilterAttributes.aspx

Кроме того, этот атрибут может быть применен на уровне контроллера, так что вы не должны положить его на каждом отдельном действии.

3

Это было на самом деле намного проще, чем я думал. Кажется, .net довольно умный, я попробовал следующее:

<location path="Issues/RSS"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    <allow users="?" /> 
    </authorization> 
</system.web> 

И это сработало :)

+0

grr, вы избили меня :) – 2008-12-04 15:40:14

1
<location path="/Issues/RSS/"> 
<system.web> 
<authorization> 
<allow users="*" /> 
</authorization> 
</system.web> 
</location> 

EDIT: причина, почему это, кстати, происходит потому, что .NET является предполагая, что URL-адрес переходит в каталог, и этот тег местоположения выше говорит: «все в каталоге« Проблемы/RSS »безопасно :)

+0

Иметь правильный ответ: p – qui 2008-12-04 16:14:03

0

Возможно, он не работает должным образом.

Кажется, что в моем случае по крайней мере вам по-прежнему нужен файл cookie для проверки, чтобы просмотреть страницу.Вы можете выйти из системы и просмотреть его, если у вас есть файл cookie.

Это нехорошо для меня, мне нужна страница, чтобы быть полностью публичной, так как это RSS-канал.

0

Я согласен с Charlino в том, что тег [Authorize], вероятно, решит вашу проблему.

Если вы используете одно действие контроллера как для RSS, так и для страницы (и просто визуализируете другой ActionResult на основе какого-либо параметра), вы можете проверить, аутентифицирован ли пользователь с помощью HttpContext.Current.User.Identity.IsAuthenticated, и использовать его в действии контроллера решить, продолжать или нет &.