Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/09/2006, 15:21
dvelazquez
 
Fecha de Ingreso: agosto-2006
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
Si se puede compañero

Echale un ojo a esto:

Código:
 
<system.web>
<customErrors mode="Off"/>
<authentication mode="Forms">
<forms name=".ASPXFORMSDEMO" loginUrl="login.aspx" protection="All" path="/" timeout="30"/>
<passport redirectUrl="internal"/>
</authentication>
<compilation debug="true"/>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
<location path="admin">
<system.web>
<authorization>
<deny users="?"/>
<deny roles="Usuario"/>
<allow roles="Admin"/>
</authorization>
</system.web>
</location>
<location path="privado">
<system.web>
<authorization>
<deny users="?"/>
<allow roles="Usuario"/>
</authorization>
</system.web>
</location>
Jo que mal tabulado... en fin.

Procedamos.

Fijate que se crean dos roles, Usuario y Admin. Cada uno de ellos tendrá permisos en el directorio privado y en el directorio admin respectivamente.

Con eso la parte del webconfig ya la tienes.

Ahora lo que tienes es que currarte la autentificacion, que yo la suelo hacer mediante una cookie.

Te pasteo algo de código que te puede ayudar a la hora de trabajar con los roles. Básicamente lo que hay que hacer es que cuando un usuario se intenta autentificar, hay que asignarle por código (c# o vb.net) qué rol le pertenece. Posteriormente el sistema se ocupará, según lo definido en webconfig de permitirle "quedarse en el directorio" o redireccionarle a la página que pones más arriba.

Vamos a por el código:

El comportamiento del tipico botón Entrar de un sitio web podría ser el siguiente:
Código:
 
if (el usuario se ha autentificado correctamente en la web)
{
FormsAuthenticationTicket tkt;
String cook, sNombre;
HttpCookie ck;
sNombre = usuario;
tkt = new FormsAuthenticationTicket(1, sNombre, DateTime.Now, DateTime.Now.AddMinutes(30), false, i + "");
cook = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cook);
Page.Response.Cookies.Add(ck);
}
En éste código básicamente se ha creado la cookie y en el momento de añadirla, se dispara el evento de autentificación que te comento más abajo.

Como nota aclaratoria, la variable i almacena un 1 ó un 2 si el usuario (segun nos haya dicho la base de datos al confrontarlo con la user/pass) administrador o usuario normal respectivamente.(Más abajo comprenderás por qué te cuento esto).


Ahora tienes que añadir a tu sitio web un componente del tipo Global.asax
y dentro de él programar el siguiente evento: Application_AuthenticateRequest con un código similar a éste:

Código:
 
if (!(HttpContext.Current.User == null))
{
if (HttpContext.Current.User.Identity.AuthenticationType == "Forms")
{
FormsAuthenticationTicket tkt;
tkt = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
String[] usuarios ={ "" };
if (Convert.ToInt32(tkt.UserData) == 1)
{
//usuario administrador
usuarios[0] = "Admin";
}
else
{
if (Convert.ToInt32(tkt.UserData) == 2)
{
//usuario normal
usuarios[0] = "Usuario";
}
else
{
//usuario mal autenticado
Response.Redirect("http://www.tuweb.com/login.aspx");
}
}
System.Web.Security.FormsIdentity id;
id = (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, usuarios);
}
}

Este evento es el que se dispara cuando un usuario pretende autentificarse. Entonces es en este punto donde se le asigna (en función de su user/password) qué rol tiene el usuario.

Bueno espero que se entienda bien y sobre todo lo siento por las tabulaciones.

Un saludo compañero.

__________________
Artículos sobre programación - www.webprogramacion.com

Última edición por dvelazquez; 27/09/2006 a las 15:25 Razón: Para resaltar algunas palabras con colores ...