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 را همواره در تیکتم داشته باشم.
اساتید بزرگوار پیشاپیش از توجهی که در پاسخ به بنده دارید تشکر و سپاسگذاری می کنم.
من از روش زیر برای مدیریت نقش های قسمت های ادمین برنامه هایم استفاده میکنم. ابتدا مبسوط روشم را عرض می کنم تا بتوانم مشکلم را بیان کنم:
این بخش را در فایل 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 را همواره در تیکتم داشته باشم.
اساتید بزرگوار پیشاپیش از توجهی که در پاسخ به بنده دارید تشکر و سپاسگذاری می کنم.