Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Menu Dinamico Problematico - Parte 3

29 views
Skip to first unread message

marco...@gmail.com

unread,
May 22, 2007, 11:15:25 AM5/22/07
to
Hola Gente:
Bueno aca voy con mi tercer pregunta relacionada al tema de menues
dinamicos.
Como para hacer un repaso:
En el post:

1 - "Menu dinamico problematico" , habia preguntado como hacer un
menu que se ajuste a los roles o permisos de usuarios. En resumen la
respuesta era usar una combinacion de la seguridad de .net con sitemap
y site navigation. Enlace del post:

http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/browse_thread/thread/3559b0bf6955110d/aa290ff017bb0450?hl=es#

2 - en el post "Menu Dinamica Problematico - Parte 2": pregunte a
cerca de como ponerle seguridad a eso debido a que si bien el menu se
armaba en forma dinamica basado en el usuario, pero un usuario anonimo
que escribia en forma manual la URL podia ver una pagina no
autorizada. En resumen, la respuesta era configurar la seguridad
del .net ya se por URL o por Archivo, definir roles de usuarios,
permisos y establecer esos permisos en el webconfig.

Eso tambien funciono sin problemas y aqui el enlacen de este post:

http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/browse_thread/thread/937944f7eae12300/69af6d3ef5f645b8?hl=es#69af6d3ef5f645b8

Aclaracion si algun link no anda: "algo que aprendi en este foro es
que Microsoft mueve constantamente sus paginas".
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Y ahora vienen las nuevas preguntas para ver si puedo finalizar mi
doctorado en Menues!
Resulta que la seguridad anterior funciona bien o relativamente bien y
es lo que quiero mejorar.

Tengo creado los roles: employees y customers.
Tambien tengo creados los usuarios: employee01 y customer01
asignandole a cada uno el rol correspondiente a su nombre.

Inicialmente coloque el siguiente codigo en el webconfig de cada sub-
folder que quiero restringir (esos web config ya se crean automaticos
cuando se usa el wizard de configuracion de .net para aginar permisos
y crear roles y usuarios):

<!-- Permiso para CUSTOMERS -->
<location path="Customers/Support.aspx">
<system.web>
<authorization>
<deny users="?" />
<allow roles="customers"/>
<allow roles="employees"/>
</authorization>
</system.web>
</location>

<!-- Permiso para EMPLOYEES -->
<location path="EmployeesOnly/Discounts.aspx">
<system.web>
<authorization>
<deny users="?" />
<deny roles="customers"/>
<allow roles="employees"/>
</authorization>
</system.web>
</location>

En verdad que este codigo no me funciono en los webconfigs de cada sub-
folder, inclusive colocandole delante el tag <configuration> y algunos
que otros cambios.

Finalmente lo coloque en el webconfig principal justo una linea antes
de finalizar el archivo, antes de </configuration> y ahi si me
funciono.

El problema es que no funciona del todo bien por ejemplo:
- Cuando ingreso como usuario anonimo -> solo puedo ver las paginas
autorizadas por el y si intento escribir manualmente una URL no
autorizada me re-direcciona automaticamente a la pagina de Login.
- Lo mismo sucede con el usuario employee01, que solo puede ver de
acuerdo al permiso que tiene.
- Y lo mismo para el usuario customer01.
- El problema es que Cuando entro con el usuario employee01 y accedo a
una URL que no esta permitida para un usuario anonimo, puedo hacer un
copy / paste de esa URL, posteriormente hago un logout y quedo como
usuario anonimo, ahi es donde pego la URL que copie del usuario
employee01 y si lo accedo, y esto no deberia pasar.

Es decir que la restriccion anda bien, sino tuviera dos tipos de
usuarios diferentes en el mismo computador.

Entonces, alguien me podria explicar como mejorar esto o que hice mal?
Agradezco la ayuda.

Perdon por el post medio largo, quizas sirva para usuarios con los
mismo problemas que yo.

Saludos

Marcos

Jose A. Fernandez

unread,
May 22, 2007, 2:49:19 PM5/22/07
to
Hola Marcos
Sinceramente muy buena tu explicacion detallada del ciclo de vida de
tu conocimiento sobre menus :)
Bueno si entendi bien (espero que si) te esta dando el cache del
explorador (o de un proxy intermedio tambien puede ser), es decir
fijate con pegar la direccion y estando alli presiona Ctrl+F5 para
saltar el cache del explorador refrezcando la pagina.
O configura tu browser para que siempre busca la pagina y no se quede
con la que tiene en el nevagedor
Fijate si es esto lo que te esta sucediendo..
En caso afirmativo deberias indicar que esa pagina no se cachee. (eso
lo vemos si es el diagnostico correcto)

Espero que sea eso
Avisanos
_______________________
Jose A. Fernandez


On 22 mayo, 12:15, marcosjr...@gmail.com wrote:
> Hola Gente:
> Bueno aca voy con mi tercer pregunta relacionada al tema de menues
> dinamicos.
> Como para hacer un repaso:
> En el post:
>
> 1 - "Menu dinamico problematico" , habia preguntado como hacer un
> menu que se ajuste a los roles o permisos de usuarios. En resumen la
> respuesta era usar una combinacion de la seguridad de .net con sitemap
> y site navigation. Enlace del post:
>

> http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/b...


>
> 2 - en el post "Menu Dinamica Problematico - Parte 2": pregunte a
> cerca de como ponerle seguridad a eso debido a que si bien el menu se
> armaba en forma dinamica basado en el usuario, pero un usuario anonimo
> que escribia en forma manual la URL podia ver una pagina no
> autorizada. En resumen, la respuesta era configurar la seguridad
> del .net ya se por URL o por Archivo, definir roles de usuarios,
> permisos y establecer esos permisos en el webconfig.
>
> Eso tambien funciono sin problemas y aqui el enlacen de este post:
>

> http://groups.google.com.ar/group/microsoft.public.es.dotnet.aspnet/b...

marco...@gmail.com

unread,
May 22, 2007, 8:11:01 PM5/22/07
to
Afirmativo Jose,
Con Ctrl + F5 me limpia la cache del explorador y a partir de ahi ya
no funciona mas el copy paste.

Entonces que hago???

Marcos

Jose A. Fernandez

unread,
May 23, 2007, 2:40:54 PM5/23/07
to marco...@gmail.com
Hola Marcos
El tema del CACHE en paginas web... que tema!
Te comento mi propia experiencia y espero que alguien comparta o la
discutimos un poco aqui :)
Vamos a la historia, se permite en HTML agregar etiquetas meta (los
famosos metatags) para indicarle que no cachee
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Expires" content="-1">

Pero tambien cuando idearon el protocolo http envia dentro del
encabezado del mismo estas directivas del cache.
Si por codigo colocas en el codebehind (en el load de la pagina)
Response.Cache.SetCacheability(HttpCacheability.NoCache)
(Nota: aqui si lees el codigo dice que: NoCache no envía la directiva
de solicitud HTTP 1.0 común Pragma: no-cache. entonces yo hacia por
las dudas y haciendo caso casi reliogoso ;) a
http://support.microsoft.com/default.aspx?scid=kb;es-es;234067
Entonces en el Page_Load
Response.AddHeader("Pragma", "no-cache")
Aqui directamente escribo en el

Pero en la respuesta en el encabezado HTTP es:
Server: ASP.NET Development Server/8.0.0.0
Date: Wed, 23 May 2007 18:02:03 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: text/html; charset=utf-8
Content-Length: 520
Connection: Close

200 OK

Como veras envia los datos de:
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1

PERO NO ME FUNCIONABA :S, porque los nevagadores no se como
implementaran (Eso era con IE5.5 e IE6) ahora con el IE7 parece que
bien y con el FF mas aun.
Pero bueno tendrias que verificarlo. PEro si el usuario ve la pagina y
quiere hacer algo INDUDABLEMENTE no podra realizarlo porque la terea
requiere ir al servidor.

Sintesis
------------------
Para realizar esto mismo por directiva de pagina es;
<%@ OutputCache Location="None" VaryByParam="None" %>
Para lo mismo, pero por codebehind:
Response.Cache.SetCacheability(HttpCacheability.NoCache)
(esto envia en el encabezado http como te dije)
o para colocar cualquier "atributo" en el encabezado http
Response.AddHeader("Pragma", "no-cache")
Response.AddHeader("cache-control", "private")
vaa cualquier cosa puedes colocar y luego recuperarla
Response.AddHeader("unEjemplo", "valor")

Tambien a nivel web.config (esto no lo probe pero deshabilita todo el
cache)
<outputCache enableOutputCache="false"></outputCa
che>
(tendriamos que ahondar mas en esta configuracion)

O en paginas HTML en el Header como
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Expires" content="-1">
(esto tambien lo puedes agregar por


Recomedacion:
--------------------
Cuando es necesario entonces esto de no-cache coloco esto en el
codebehind de mi pagina:
Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache)
Response.Cache.SetAllowResponseInBrowserHistory(False)
Response.Cache.SetNoStore()

(...)
Cuando HttpCacheability se establece en NoCache o ServerAndNoCache, el
encabezado HTTP Expires se establece de forma predeterminada en -1, lo
que indica al cliente que no almacene las respuestas en la carpeta
Historial de la memoria caché; de esta manera, cada vez que se
utilicen los botones atrás y adelante, el cliente solicita una nueva
versión de la respuesta. Puede reemplazar este comportamiento llamando
al método SetAllowResponseInBrowserHistory con el parámetro allow
establecido en true.
Si HttpCacheability se establece en valores distintos de NoCache o
ServerAndNoCache, llamar al método SetAllowResponseInBrowserHistory
con cualquier valor de allow no tiene ningún efecto.
(...)

y cuando me dice "No tiene ningun efecto" ES ASI jeje


Antes... usaba mucho todo esto:
Response.Expires = -15
Response.ExpiresAbsolute = Date.Now.AddMinutes(-15)
Response.AddHeader("pragma", "no-cache")
Response.AddHeader("cache-control", "private")
Response.CacheControl = "private"
Pero me daba cuenta de que con algunas elementos sobraban

Enlaces:
----------------
HttpResponse.Cache (Propiedad)
Obtiene la directiva de caché (caducidad, privacidad, cláusulas de
variación) de una página Web.
http://msdn2.microsoft.com/es-es/library/system.web.httpresponse.cache(VS.80).aspx

Establecer el almacenamiento en caché de una página
http://msdn2.microsoft.com/es-es/library/w9s3a17d(VS.80).aspx

HttpCachePolicy.SetAllowResponseInBrowserHistory (Método)
Hace que la respuesta esté disponible en la caché de historial del
explorador del cliente, independientemente del valor de
HttpCacheability especificado en el servidor, cuando el parámetro
allow es true.
http://msdn2.microsoft.com/es-es/library/system.web.httpcachepolicy.setallowresponseinbrowserhistory(VS.80).aspx

HttpCacheability (Enumeración)
NoCache, Private, Public, Server, ServerAndNoCache, ServerAndPrivate
http://msdn2.microsoft.com/es-es/library/system.web.httpcacheability(VS.80).aspx

Cómo a caché utilizando Visual Basic .NET en ASP.NET
(que magnifica traduccion para: How To Cache in ASP.NET by Using
Visual Basic .NET .. no te parece?)
http://support.microsoft.com/kb/811431/es


part of Hypertext Transfer Protocol -- HTTP/1.1 - RFC 2616 Fielding,
et al.
14 Header Field Definitions
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html


Espero que te sirva de ayuda o guia
___________________________
Jose A. Fernandez

marco...@gmail.com

unread,
May 23, 2007, 3:46:11 PM5/23/07
to
hola Jose, aca van mis comentarios de tu respuesta:

- Primero muchas gracias por tu respuesta!
- Esta muy clara tu explicacion fuera de que para gente principiante
como yo todo esto es un mundo nuevo, pero se entendio muy bien!
- No hay puntuacion 6 estrellas sino la colocaria por la respuesta que
explica muy bien los porque y una breve resenia historica.
- Voy a revisar bien los links que me envias, al igual que el codigo y
las sugerencias (como siempre hago) y posteriormente te cuento y
coloco aqui como me fue para que le sirva a todos!
- cuando termine con esto, se viene la parte 4 de mi pregunta con
condimentos nuevos :) y con todo esto y tus respuestas creo que voy a
poder terminar sin problemas mi DOCTORADOR EN MENUS.

Saludos,

Marcos

marco...@gmail.com

unread,
May 23, 2007, 3:46:30 PM5/23/07
to

Jose A. Fernandez

unread,
May 23, 2007, 8:28:50 PM5/23/07
to
Marcos
copio nuevamente el post porque no salio en el grupo cuando coloque
que te envie un correo tambien
Porque quedo "descolgada" tu respuesta :)
...
Aqui esta:
--------------------

200 OK

marco...@gmail.com

unread,
May 28, 2007, 3:07:53 PM5/28/07
to
Gracias Jose , te cuento ya andubo,

le puse este codigo, en el evento load de la pagina nomas

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Response.Cache.SetCacheability(HttpCacheability.NoCache)
End Sub

Si tenes comentarios extras de este tema avisame!

Saludos,

Marcos

0 new messages