Разрешение доступа к определенным страницам с ASP-MVC и проверкой подлинности с помощью форм - PullRequest
5 голосов
/ 04 декабря 2008

Вот простой обзор моей схемы каталогов для моих просмотров:

Проект

  • Страница 1
  • Страница 2
  • RSS

Вопросы

  • Страница 1
  • Страница 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-лента.

Ответы [ 5 ]

3 голосов
/ 11 марта 2009

Забудьте о вещи ... звучит так, как будто вам нужно использовать атрибут [Authorize] для ваших действий.

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

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

3 голосов
/ 04 декабря 2008

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

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

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

1 голос
/ 04 декабря 2008
<location path="/Issues/RSS/">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>

РЕДАКТИРОВАТЬ: причина, по которой это работает, кстати, в том, что .NET предполагает, что URL идет в каталог, и этот тег расположения выше говорит "что-нибудь в каталоге 'Issues / RSS' безопасно:)

0 голосов
/ 11 марта 2009

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

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

0 голосов
/ 21 января 2009

Это может работать не так, как задумано.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...