Foros del Web » Programación para mayores de 30 ;) » .NET »

Duda sobre carpetas privadas

Estas en el tema de Duda sobre carpetas privadas en el foro de .NET en Foros del Web. Hola. Tengo mucha experiencia programando en ASP pero ahora estoy haciendo una aplicacion en ASP.net resulta que trabajo con una base de datos SQL-Server esta ...
  #1 (permalink)  
Antiguo 12/07/2008, 17:06
 
Fecha de Ingreso: mayo-2006
Mensajes: 29
Antigüedad: 18 años
Puntos: 1
Duda sobre carpetas privadas

Hola. Tengo mucha experiencia programando en ASP pero ahora estoy haciendo una aplicacion en ASP.net resulta que trabajo con una base de datos SQL-Server esta lleva toda la información de los usuarios registrados, dentro del sitio web hay una carpeta que es exclusiva para cierto tipo de usuarios, normalmente en ASP (clasico) lo que haría seria comparar en cada pagina con una variable de session si el usuario pertenece a ese grupo "exclusivo", el problema es que son muchísimas paginas y busco alternativas mas simples.

ya investigado todo lo posible y he encontrado que .NET tiene una herramienta de roles y user, para aplicar en el web.config, pero por mas que he investigado no logro aplicarlo, tengo esto en un web.config de mi carpeta exclusiva:


<configuration>
<system.web>
<authorization>
<allow roles="members" />
<deny users="*" />
</authorization>
</system.web>
<configuration>


esto esta bien porque deniega el acceso a todos los usuarios excepto los que este en el rol de "members" pero:

como creo ese rol?
como agrego usuarios a ese rol?
como hago para que toda esta información se sincronice con los usarios registrados en mi base de datos?

ya he buscado por todos lados y no encuentro una explicación clara, he leído algunos tutoriales al respecto pero sigo sin entender, si alguien lo ha implementado con éxito le agradecería la información.

Saludos.
  #2 (permalink)  
Antiguo 12/07/2008, 18:49
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Duda sobre carpetas privadas

Cuando abres tu VisualStudio tienes el Solution Explorer y uno de los primeros botones es el de "Herramienta de administracion de sitio" y ahi puedes crear los roles y miembros que necesites.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 18/07/2008, 05:23
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Duda sobre carpetas privadas

Bueno vamos por partes a ver si esto te sirve, en el ejemplo que te pongo es un logueo atraves de formularios con las sesiones atraves de las cookies.

1 En el web config tienes que indicar desde que pagina se debe de loguear el usuario

<authentication mode="Forms">
<forms loginUrl="Donde hay que loguearse.aspx" name="AuthCookie" timeout="30" path="/"></forms>
</authentication>

Si te fijas ademas indicas el tiempo de finalizacion de sesión.

en el global asax has de añadir lo siguiente void Application_AuthenticateRequest(object sender, EventArgs e)
{//esto se ejecuta cada vez que entra a la pagina
//extraer la autenitcacion de la cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
//comprobaciones de la cookie
if (null == authCookie)
{
return;//sale de la funcion, no devuelve nada
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);

}
catch (Exception ex)
{
//Fallo al desencriptar
return;
}
if (null == authTicket)
{
return;
}
//ya tenemos el ticket creado, le asignamos los roles del usuario

string[] roles = authTicket.UserData.Split(new char[] { '|' }); //split separa. Le hemos mandado "admin|private", pues coge y mete en una posicion de la tabla admin y en otra private
//crear el objeto identidad
FormsIdentity id = new FormsIdentity(authTicket);
System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id,role s);
//añadir el objeto principal al actual hhttpcontext del usuario
Context.User = principal;
}

Te continuo en otro post para que te resulte mas facil de seguir
  #4 (permalink)  
Antiguo 18/07/2008, 05:25
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Duda sobre carpetas privadas

Y ahora te añado el codigo que iria en el formulario que se utilizaria para iniciar la sesión

Código:
 protected void Button1_Click(object sender, EventArgs e)
    {
        if (txtuser.Text != "" & txtpass.Text != "")
        {
            string rol = IsAuthenticated(this.txtuser.Text, this.txtpass.Text);
                if (rol != "")
                {
                    FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtuser.Text, DateTime.Now, DateTime.Now.AddMinutes(30), false, rol);
                    //Encriptar el type
                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                    //crear la coockie con el ticket cifrado
                    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    //añadimos la cookie a la coleccion de cookies del navegador
                    Response.Cookies.Add(authCookie);
                   // Response.Redirect(FormsAuthentication.GetRedirectUrl(txtuser.Text, false));
                    if (rol == "admin")
                    {
                        Response.Redirect("~/zonaempleado/Default.aspx");
                    }
                    if (rol == "user")
                    {
                        Response.Redirect("~/zonacliente/Default.aspx");
                    }
                }
                else
                {
                    Response.Write("<script>alert('El usuario especificado no existe o la contraseña es incorrecta')</script>");
                }   
        }
        else
        {
            Response.Write("<script>alert('Tanto el nombre de usuario como al contraseña son obligatorios para loguearse')</script>");
        }
    }

    private string IsAuthenticated(string username, string password)
    {
        // Comprobamos que el usuario existe en nuestra base de datos y que la contraseña es la correcta
        SqlConnection objconectar = new SqlConnection(ConfigurationManager.ConnectionStrings["conexionsurf"].ToString());
        //Abrimos la conexion
        objconectar.Open();
        //Creamos la variable tipo Command y le asignamos la consulta sql para que nos busque solo por el apellido asignado
        SqlCommand Consulta = new SqlCommand("SELECT rol from usuarios Where dni=@pidcliente and pass=@ppass;", objconectar);
        Consulta.Parameters.Add("@pidcliente", SqlDbType.VarChar);
        Consulta.Parameters["@pidcliente"].Value = this.txtuser.Text;
        Consulta.Parameters.Add("@ppass", SqlDbType.VarChar);
        Consulta.Parameters["@ppass"].Value = this.txtpass.Text;
        //Ejecutamos la cosulta y la asignamos al lector.
        string rol = Convert.ToString(Consulta.ExecuteScalar());
        //Cerramos conexión y desechamos la variable
        objconectar.Close();
        objconectar.Dispose();
        return rol;
    }
Si te fijas esta para que redireccione segun el rol que tengan a su seccion correspondiente.

Espero que te sea de ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.