Ролевая авторизация

Я пытаюсь использовать авторизацию на основе ролей декларативным способом, когда неавторизованный пользователь пытается получить доступ к странице, он никогда не вызывает исключение или не показывает пользователю сообщение об ошибке. Что я должен сделать, чтобы показать неавторизованное сообщение? это возможно декларативным способом?

использование кодирования - не лучший вариант, у меня есть несколько ролей, и папка авторизована для нескольких ролей, в то время как другие папки авторизованы для одной роли.

Спасибо

4 ответа

Решение

Используйте следующий код на странице входа в систему, чтобы перенаправить пользователя на неавторизованную страницу или страницу по умолчанию.

    protected void Page_Load( object sender, EventArgs e )
    {
        if( Page.IsPostBack )
            return;

        if( !Request.IsAuthenticated )
            return;

        if( !string.IsNullOrEmpty( Request.QueryString["ReturnUrl"] ) && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.QueryString["ReturnUrl"], User,"GET"))
        {
            // In Forms Authentication, authenticated but unauthorized requests are converted into a Redirect to the Login page.  
            // Redirect these to an error page instead.
            Response.Redirect( "~/UnauthorizedAccess.aspx", false );
        }
        else
        {
            Response.Redirect( FormsAuthentication.DefaultUrl, false );
        }
    }

Смотрите эту ссылку для картины того, что происходит и больше информации:

http://www.asp.net/security/tutorials/user-based-authorization-cs

Если он не проходит авторизацию, он выдаст исключение. Это должно пройти Что вы используете для аутентификации? Вы отключили анонимный доступ?

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

Также можно использовать web.config для настройки прав доступа к различным папкам или файлам. Каждая папка может иметь список разрешений или запретов, например:

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

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

Другие вопросы по тегам