martes, 26 de abril de 2011

reportviewer1.visible = false se oculta o queda invisible el contro reportviewerl



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.

Un detalle o al parecer es un bug, ocurre cuando se cambia la propiedad visible del reportviewer, lo cual no es común, pero en algunos proyectos se tiene que poner invisible el control por razones de seguridad, o a petición del usuario.
Al parecer esto se debe a la inicialización del control que se hace en forma declarativa en el archivo aspx o en el evento init de la pagina, de tal manera que si inicializamos ReportViewer.Visible = false, cuando intentamos con un click de un bton hacerlo visible, no se presenta ningún contenido en el reporte.
Al parecer el reportviewer no detecta que la definicion del reporte ha cambiado durante los postbacks y permanece invisible.
Una de las maneras de cambiar es obligar a que el reportviewer vuelva a redefinir el reporte, con un cambio a alguna propiedad, como en el siguiente código..
ReportViewer1.Visible = True
ReportViewer1.ProcessingMode = ProcessingMode.Remote
ReportViewer1.ProcessingMode = ProcessingMode.Local
Si conocen otra manera de arreglar este comportamiento, no duden en compartirla.

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