martes, 12 de abril de 2011

validar los accesos a un sitemap



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Hola amigos les comparto esta rutina para validar los accesos a un sitemap, por
medio de los roles que son integrados en la seguridad de Asp Net
Este ejemplo esta hecho en Visual Basic, ya que la mayoria de ejemplos estan hechos en C#
Para llevar a cabo lo anterior debemos crear un httpmodule, como se ve a continuacion
Imports System
Imports System.Web
Imports System.Web.Security
Namespace Jimavb.Net
Public Class Moduloseguridadhttp
Implements System.Web.IHttpModule
'creo una instancia
Public Moduloseguridadhttp As Moduloseguridadhttp
'inicio y le añado un manejadur
Public Sub Init(ByVal context As HttpApplication) Implements IHttpModule.Init
AddHandler context.AuthenticateRequest, AddressOf Me.AuthenticateRequest
End Sub
Private Sub AuthenticateRequest(ByVal sender As [Object], ByVal e As EventArgs)
Dim Application As HttpApplication = DirectCast(sender, HttpApplication)
Dim Request As HttpRequest = Application.Context.Request
Dim Response As HttpResponse = Application.Context.Response
Dim allow As Boolean = False

If Request.Url.AbsolutePath.ToLower() = FormsAuthentication.LoginUrl.ToLower() Then
Return
End If
'si no existe ningun usuario, se redirige a la forma en donde me autentifico
If Application.Context.User Is Nothing Then
Response.Redirect(FormsAuthentication.LoginUrl)
End If
If SiteMap.CurrentNode Is Nothing Then
Return
End If
'si ese nodo no tiene rol, le permitimos entrar
If SiteMap.CurrentNode.Roles.Count = 0 Then
allow = True
Else
'si el usuario tiene el rol permitido para esa pagina le permite entrar
For Each role As String In SiteMap.CurrentNode.Roles
If Roles.IsUserInRole(role) Then
allow = True
Else
Response.Write("No tiene derechos, para este menú")
End If
Next
End If
If allow = False Then
Response.Redirect(FormsAuthentication.LoginUrl)
End If
End Sub
'hacemos limpieza
Public Sub Dispose() Implements IHttpModule.Dispose
End Sub
End Class
End Namespace
, para hacer la llamada en Web.config es de la siguiente manera
'reemplazo las < por espacios o comillas, para que aparezcan el texto
"system.web
httpmodules
add name="Moduloseguridadhttp" type="Jimavb.Net.Moduloseguridadhttp">
add>httpmodules
system.web>

OJO: CUANDO LO SUBAN A PRODUCCION, SI NO REGISTRAN EL MODULO NO SE EJECUTA,
, ASI QUE HAY QUE DECLARARLO EN EL ADMINISTRADOR IIS
'y para registrarlo en el servidor IIS 7, de otra manera no lo encuentra, lo puedes hacer con el administrador o con
el siguiente codigo en web.config
system.webserver
modules
add name="Moduloseguridadhttp" type="Jimavb.Net.Moduloseguridadhttp" precondition="managedHandler">
add
modules
system.webserver>

Si saben alguna manera de ocultar los nodos, no duden en compartirla

No hay comentarios:

Publicar un comentario