PDA

View Full Version : هدايت کاربر به صفحه اي خاص بر اساس نقش هنگام لوگين



bftarane
دوشنبه 08 آبان 1391, 14:08 عصر
سلام دوستان
من دارم از سيستم تشخيص هويت پيشرفته استفاده مي کنم به آدرس زير
http://how2learnasp.net/article.aspx?code=85c9dd50-0935-48c2-9039-949da6b42f8d
که به خوبي کار مي کنه.
من مي خواستم کاربران بر اساس نقشي که دارن مستقيماً به صفحه مخصوص خودشون برن
مثلاً Admin بره صفحه Administrator.aspx
بنابراين کد زير رو به رويداد لوگين اضافه کردم
بازم به خوبي کار مي کرد

switch (role)
{
case "Admin":
Response.Redirect("Administrator.aspx");
break;
case "ArticlesManager":
Response.Redirect("ManageArticles");
break;
case "NewsManager":
Response.Redirect("ManageNews");
break;
default:
break;
}
ولي مشکل از اونجايي شروع ميشه که من به کاربرم به شکل زير نقش مي دم
Admin,ArticlesManager
در اين صورت ديگه مثلاً Admin به صفحه Administrator.aspx مستقيماً وارد نميشه بعد از لوگين
و به صفحه ديفالت مي ره ولي در اونجا دوباره کار به خوبي پيش ميره يعني اونجا مي تونه به صفحاتي که اجازه ورود داره وارد بشه.
خودم فکر مي کنم بايد از splitter استفاده کنم
ولي نتونستم.

لطفاً کمکم کنيد. !Please help me

bftarane
سه شنبه 09 آبان 1391, 12:33 عصر
سلام مجدد.م
من اومدم به جاي اون Swich case ها کدهاي زير رو نوشتم

if (Page.User.IsInRole("Admin"))
{
Response.Redirect("Administrator.aspx");
}
if (Page.User.IsInRole("ArticlesManager"))
{
Response.Redirect("ManageArticles.aspx");
}
if (Page.User.IsInRole("NewsManager"))
{
Response.Redirect("ManageNews.aspx");
}
ولي بازم نتيجه نگرفتم. چند بار امتحان کردم عجيبه يکي دو بار نتيجه مثبت بود يعني Admin مستقيم به صفحه مورد نظر رفت ولي چند بار هم نتيجه منفي بود.
واقعاً گيج شدم. راستي من با فايلي که انتهاي مقاله اي که آدرسش رو در بالا دادم اين قضيه رو امتحان کردم اونجا هم نتونستم نتيجه بگيرم. اگه ممکنه اين قابليت رو روي اون فايل تست کنيد و نتيجه رو در ميون بزاريد.
خيلي به اين قضيه احتياج دارم. لطفاً کمک کنيد.:ناراحت:

rezaei_y
سه شنبه 09 آبان 1391, 13:12 عصر
با سلام

کدی که نوشتید رو بذارید داخل بلوک زیر


if (User.Identity.IsAuthenticated)
{
}

bftarane
سه شنبه 09 آبان 1391, 13:47 عصر
سلام.
ببينيد اين کل کدهاي دکمه لوگين من

protected void btn_login_Click(object sender, EventArgs e)
{
if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfig File(txt_pass.Text, "MD5")))
{
string role = GetMemberRoleByID(txt_uname.Text);
DateTime expiration;
if (chk_rememberme.Checked)
{
expiration = DateTime.Now.AddMonths(1);
}
else
{
expiration = DateTime.Now.AddMinutes(30);
}
FormsAuthenticationTicket AuthTicket = new FormsAuthenticationTicket(1, txt_uname.Text, DateTime.Now, expiration, false, role);
string encryptedTicket = FormsAuthentication.Encrypt(AuthTicket);
HttpCookie AuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(AuthCookie);



switch (role)
{
case "Admin":
Response.Redirect("Administrator.aspx");
break;
case "ArticlesManager":
Response.Redirect("ManageArticles.aspx");
break;
case "NewsManager":
Response.Redirect("ManageNews.aspx");
break;
default:
break;
}


Response.Redirect(FormsAuthentication.GetRedirectU rl(txt_uname.Text, chk_rememberme.Checked));
}
else
{
lbl_login.Visible = true;
}
}
پس ربطي به Authenticate نداره. در ضمن من ديدم اون isinrole ها که نوشتم حتي براي حالت تک نقشي هم جواب نمي ده بنابراين برگشتم سرجاي اولم و Swich رو قرار دادم دوباره. اگه يکي بتونه اين قضيه رو تو فايلي که انتهاي مقاله گذاشته شده تست کنه فکر مي کنم خيلي زودتر جواب مشکل پيدا مي شه دانلودش هم خيلي کم طول ميکشه حجمش کمه.
لطفاً من رو با اين مشکل تنها نزاريد.:ناراحت:

fakhravari
سه شنبه 09 آبان 1391, 15:25 عصر
این را برسی کنید.
protected void btn_submit_Click(object sender, EventArgs e)
{
if (GetMemberAuthenticate(txt_uid.Text, txt_pwd.Text))
{
string role = GetMemberRoleByID(txt_uid.Text);
FormsAuthenticationTicket AuthTicket = new FormsAuthenticationTicket(1, txt_uid.Text, DateTime.Now, DateTime.Now.AddHours(1), false, role);
string encryptedTicket = FormsAuthentication.Encrypt(AuthTicket);
HttpCookie AuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(AuthCookie);

//Response.Redirect(FormsAuthentication.GetRedirectU rl(txt_uid.Text, chk_member.Checked));

string[] temp = role.Split(',');



for (int i = 0; i < temp.Length; i++)
{
if (temp[i] == "admin")
{
Response.Redirect("Administrator.aspx");
}
}

for (int i = 0; i < temp.Length; i++)
{
if (temp[i] == "manager")
{
Response.Redirect("Administrator.aspx");
}
}

for (int i = 0; i < temp.Length; i++)
{
if (temp[i] == "user")
{
Response.Redirect("Administrator.aspx");
}
}


}
else
{
lbl.Visible = true;
}
}

bftarane
سه شنبه 09 آبان 1391, 17:01 عصر
هزار تا تشکر از شما هم کمه. لطف بزرگي در حقم کرديد.