Ролевая авторизация
Я пытаюсь использовать авторизацию на основе ролей декларативным способом, когда неавторизованный пользователь пытается получить доступ к странице, он никогда не вызывает исключение или не показывает пользователю сообщение об ошибке. Что я должен сделать, чтобы показать неавторизованное сообщение? это возможно декларативным способом?
использование кодирования - не лучший вариант, у меня есть несколько ролей, и папка авторизована для нескольких ролей, в то время как другие папки авторизованы для одной роли.
Спасибо
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, скажем: "Вы не авторизованы для просмотра этой страницы".