Молчун
Зарегистрирован: 03 July 2008
Сообщения: 30
Примеры кода: 0
|
Re: Redirect после аутентификации |
11 July 2008 21:45 |
|
|
|
|
metravlНасколько я понимаю, событие LoggedIn у Login-контрола возникает после успешной аутентификации (не авторизации), т.е. когда Membership проверит, что действительно такой юзер и пароль имеются в БД.Да, так и есть.
metravlНо во время события LoggedIn роль юзера еще не определена,А вот с этим не согласен. Если бы роль юзера в этот момент была не определана, то код
protected void Login1_LoggedIn(object sender, EventArgs e)
{
string user = Login1.UserName;
if (Roles.IsUserInRole(user, "admin_role"))
{
Server.Transfer("~/admin/Default.aspx");
}
else
{
Server.Transfer("~/customer/Default.aspx");
}
}никогда не перешел бы в ветку Server.Transfer("~/admin/Default.aspx"); а я успешно туда попадаю, если ввожу логин-пароль юзера с ролью admin_role
metravlа когда мы сделаем Server.Transfer("~/SomePage.aspx"), то на этой SomePage.aspx роль юзера пока еще тоже не определена, поэтому когда на этой странице нажимаю кнопку, я сразу направляюсь на страницу Login.aspx, т.к на SomePage.aspx я еще не авторизирован.
ИМХО, если в web.config прописано
<system.web>
<authorization>
<allow roles="admin_role" />
<deny users="*" />
</authorization>
</system.web>то ни Redirect ни Transfer не должен отображать админскую страницу для юзера без роли admin_role ни при каких обстоятельствах, т.е. никаких кнопок вы видеть не должны -- должен происходить автоматический переход на Login.aspx
P.S. В качестве хранилища данных (пользователи, роли, и т.п.) использую стандартную базу ASPNETDB.MDF
|
|