PDA

View Full Version : فوق تخصصی: Role Base دات نت. اساتید تقاضای استمداد دارم



bfreind10
پنج شنبه 15 مهر 1389, 08:03 صبح
با سلام خدمت اساتید. اولا باید عرض کنم که درس پس میدهم خدمت اساتید.
من از روش زیر برای مدیریت نقش های قسمت های ادمین برنامه هایم استفاده میکنم. ابتدا مبسوط روشم را عرض می کنم تا بتوانم مشکلم را بیان کنم:
این بخش را در فایل Global.aspx وارد نموده ام:


Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim authCookie As HttpCookie = Context.Request.Cookies(FormsAuthentication.FormsC ookieName.ToString())
If authCookie IsNot Nothing Then
Dim MyTicket As FormsAuthenticationTicket
MyTicket = FormsAuthentication.Decrypt(authCookie.Value)
Dim MyIdentity As New FormsIdentity(MyTicket)
Dim MyPrincipal As New GenericPrincipal(MyIdentity, MyTicket.UserData.Split(New Char() {","c}))
Context.User = MyPrincipal
End If
End Sub


درفایل لاگین هم بعد از تایین اعتبار:



If (UCase(username.Text.ToString) = UCase(reader("username").ToString)) Then
If ((FormsAuthentication.HashPasswordForStoringInConf igFile....
If reader("active") Then
Dim role As String = reader("roles").ToString
Session("scode") = reader("scode")
Dim AuthTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, username.Text, DateTime.Now, DateTime.Now.AddHours(1), False, role)
Dim encryptedTicket As String = FormsAuthentication.Encrypt(AuthTicket)
Dim AuthCookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
Response.Cookies.Add(AuthCookie)
passok = True
Response.Redirect(FormsAuthentication.GetRedirectU rl(username.Text, chk_member.Checked))
Exit While
Else
pms = 1
End If
End If
End If


و بعد هم در صفحاتم با Page.User.IsInRole چک میکنم که آیا به کاربر نقش جاری اعطا شده است؟ در فایل وب کانفیگ هم دسترسی به صفحات را مشخص کرده ام.
سوالی که دارم در روش فوق من فقط می توان رول هاایم را در FormsAuthenticationTicket درج کنم. ولی من مایل هستم چند اطلاعات دیگر نظیر scode را که در برنامه فوق داخل session ریخته ام داخل همین تیکت بگذارم چون نمی خواهم هر بار در صفحات دیگر بانک را دوباره باز کنم و این کد را بازیابی کنم. و از سشن هم در اینجا نمی خواهم استفاده کنم چون مدت اعتباری که خواهد داشت احتمال دارد کوتاه تر از تیکت باشد. در واقع میخواهم scode را همواره در تیکتم داشته باشم.
اساتید بزرگوار پیشاپیش از توجهی که در پاسخ به بنده دارید تشکر و سپاسگذاری می کنم.

daffy_duck376
پنج شنبه 15 مهر 1389, 15:02 عصر
شما در این کد ها تیکتی را که صادر کرده اید را در یک کوکی رمز شده ذخیره میکنید . حال میتوانید به همان کوکی چیز های دیگر را هم اضافه کنید . در زمان نیاز هم از همون جا اطلاعات رو بخونید

bfreind10
پنج شنبه 15 مهر 1389, 16:04 عصر
با عرض جسارت میشه تغییراتی را که لازمه توی کدم بدم بگید؟

daffy_duck376
پنج شنبه 15 مهر 1389, 16:28 عصر
درفایل لاگین هم بعد از تایین اعتبار:



If (UCase(username.Text.ToString) = UCase(reader("username").ToString)) Then
If ((FormsAuthentication.HashPasswordForStoringInConf igFile....
If reader("active") Then
Dim role As String = reader("roles").ToString
Session("scode") = reader("scode")
Dim AuthTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, username.Text, DateTime.Now, DateTime.Now.AddHours(1), False, role)
Dim encryptedTicket As String = FormsAuthentication.Encrypt(AuthTicket)
Dim AuthCookie As HttpCookie = New HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
AuthCookie .Values.Add("name", "your value")
Response.Cookies.Add(AuthCookie)
passok = True
Response.Redirect(FormsAuthentication.GetRedirectU rl(username.Text, chk_member.Checked))
Exit While
Else
pms = 1
End If
End If
End If
و بعد هم در صفحاتم با Page.User.IsInRole چک میکنم که آیا به کاربر نقش جاری اعطا شده است؟ در فایل وب کانفیگ هم دسترسی به صفحات را مشخص کرده ام.
سوالی که دارم در روش فوق من فقط می توان رول هاایم را در FormsAuthenticationTicket درج کنم. ولی من مایل هستم چند اطلاعات دیگر نظیر scode را که در برنامه فوق داخل session ریخته ام داخل همین تیکت بگذارم چون نمی خواهم هر بار در صفحات دیگر بانک را دوباره باز کنم و این کد را بازیابی کنم. و از سشن هم در اینجا نمی خواهم استفاده کنم چون مدت اعتباری که خواهد داشت احتمال دارد کوتاه تر از تیکت باشد. در واقع میخواهم scode را همواره در تیکتم داشته باشم.
اساتید بزرگوار پیشاپیش از توجهی که در پاسخ به بنده دارید تشکر و سپاسگذاری می کنم.

یه نگاهی به قسمت کد بنداز . این کد برای اضافه کردن مقدار هست خوندنش هم دیگه خوندن کوکی هست دیگه کاری نداره

bfreind10
پنج شنبه 15 مهر 1389, 20:27 عصر
بزرگان عزیز من همیشه از این کد در برنامه هایمان استفاده می کنم اما هیچ وقت دقیق متوجه کارکرد اون نشدم. مشه بزرگواری کنید این کد رو توضیح بدهید. اون تیکت چیه؟ پرینسیپل چیه؟ رول رو میدونم و ازش استفاده کردم. در واقه مکانیسم این روش رو میخوام بدونم. اون تیکه کدی که توی فایل گلوبال میزاریم برای چیه؟ اینو میشه یه بزرگواری مبسوط توضیح بده؟

phyma134
چهارشنبه 20 مهر 1390, 18:08 عصر
من هم همین کارو کردم کار می کنه ولی زمان لاگین موندن خیلی کوتاهه حتی 5 ساعت به ticket اضافه کردم ولی فایده نداشت مشکل کجاست؟