PDA

View Full Version : سوال: User.IsInRole



یاسر مددیان
شنبه 11 دی 1389, 16:25 عصر
درود بر شما
چطور میشه که User.IsInRole همیشه مقدار false رو بر می گردونه؟
برای اینکه بتونیم مقدار موجود در User.IsInRole رو نمایش بدیم باید از چه دستوری استفاده کنیم؟

V0RTEX
شنبه 11 دی 1389, 18:35 عصر
خودت داری می گی مقدار false برمی گردونه
پس مقدارش رو راحت می تونی نشون بدی
اگه 0 بود بگه "فالس" اگه 1 بود بگه "تورو"

Peyman.Gh
شنبه 11 دی 1389, 18:45 عصر
چطور میشه که User.IsInRole همیشه مقدار false رو بر می گردونه؟True یا False برگشت داده می شود.
اگر کاربر وارد شده عضو Role مورد نظر باشد True و در غیر این صورت False برگشت داده می شود.


برای اینکه بتونیم مقدار موجود در User.IsInRole رو نمایش بدیم باید از چه دستوری استفاده کنیم؟فکر می کنم منظور شما این است که چگونه می توان نقش کاربر را نمایش داد.

بصورت زیر می توانید نقش کاربر وارد شده را نمایش دهید :

Response.Write( String.Join(",", Roles.GetRolesForUser()));موفق باشید.

یاسر مددیان
یک شنبه 12 دی 1389, 08:46 صبح
درود بر شما
من وقتی وارد می شم می خوام طبق Role مورد نظر کاربر رو به صفحه خودش هدایت کنم همیشه User.IsInRole مقدار False رو بر می گردونه! با دستور


Response.Write( String.Join(",", Roles.GetRolesForUser()));

که دوست عزیزمون Peyman.Gh گذاشتن هم نتونستم چیزی رو نمایش بدم. اومدم یه آرایه تعریف کردم و Role ها رو ریختم توش و خواستم تو گریدویو نمایش بدم اما چیزی به نمایش در نمیاد(با دستورات زیر :


string[] a;
a = Roles.GetAllRoles();
grid.DataSource = a;
grid.DataBind();


با دستور RoleExists چک کردم انگار اصلاً این Rol توی کوکی نیست! دستور Login من به صورت زیر، اساتید اگه امکان داره راهنمایی کنن در این مورد.



DateTime expire = DateTime.Now;
if (chksave.Checked)
{
expire = expire.AddMonths(6);
}
else
{
expire = expire.AddMinutes(60);
}
string UserRole = oDataReader["UserRole"].ToString().Trim();
FormsAuthenticationTicket userticket = newFormsAuthenticationTicket(1, txtuser.Text.Trim(), DateTime.Now, expire, chksave.Checked, UserRole);
string encodedata = FormsAuthentication.Encrypt(userticket);
HttpCookie usercookie = newHttpCookie(FormsAuthentication.FormsCookieName, encodedata);
if (userticket.IsPersistent)
{
usercookie.Expires = userticket.Expiration;
}
Response.Cookies.Add(usercookie);
FormsAuthentication.RedirectFromLoginPage(txtuser. Text, true);

یاسر مددیان
یک شنبه 12 دی 1389, 11:12 صبح
فهمیدم مشکل چیه. userData توی ticket همیشه مقدارش خالی بود! اگه کسی این مشکل رو داشت طبق دستورات لینک زیر میتونه مشکلش رو حل کنه.
http://thepursuitofalife.com/net-formsauthentication-and-blank-userdata/

یاسر مددیان
یک شنبه 12 دی 1389, 12:42 عصر
بازم مشکل هست!!! این دفعه UserData پره، تو global هم با دستورات زیر Role دارای مقدار میشه :


if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated )
{
if (HttpContext.Current.User.Identity isFormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}


وقتی تو global با دستور زیر :



bool chk = User.IsInRole("administrator");


چک می کنم که تو role مورد نظر هست مقدار True رو بر می گردونه اما وقتی تو صفحه اول سایت با همین دستور این کار رو می کنم مقدار False رو بر میگردونه!
لطفاً یکی کمک کنه:ناراحت:

یاسر مددیان
یک شنبه 12 دی 1389, 14:42 عصر
توی وب کانفیگ تغییر زیر رو ایجاد کردم درست شد.


<roleManager enabled="false">
</roleManager>

mehdi-ghafari
یک شنبه 12 دی 1389, 19:51 عصر
سلام دوستان
میشه یکی از اول یه توضیح بده
وقتی کاربر تو صفحه لاگ این اطلاعات صحیح وارد کرد چطور به یه رول مثلاً customers منتقلش کنم
و بعد از تو صفحات چطور بشناسمش که این کاربر رولش اینه
لطفاً یکی از دوستان اینو با vb بگه
با تشکر

یاسر مددیان
دوشنبه 13 دی 1389, 08:27 صبح
این آدرس رو ببین : http://barnamenevis.org/showthread.php?257287-آموزشی-ساخت-لاگین&highlight=login
نحوه چک Role کاربر که در پست های قبلی هست.