Manejo de Roles en ASP.NET

Publicado: marzo 25, 2009 en Categoria All

Buenas a todos espero se encuentren bien.

Me han escrito nuevamente desde costa rica, y un articulo que les gustaría este dentro de este blog es manejar los roles en ASP.NET.

A continuación les muestro unos ejemplos sencillos de como hacerlo.

1.- Asignar usuario a ROL.

rolesadd

Dentro de el puedes hacerlo de la siguiente manera :

Roles.AddUserToRole(this.txtusuario.text, "Administrador");

Para hacerlo mas completo posible, se verifica si el USUARIO no existe en el rol.

ASI:

rolesuser

if (!Roles.IsUserInRole(this.txtusuario.text))
{
    Roles.AddUserToRole(this.txtusuario.text, "Administrador");
    Response.Write("Usuario asignado al rol");
}
else
{
    Response.Write("Este usuario ya se encuentra agregado a el rol especificado");
}

Hecho en VB.NET

If Not Roles.IsUserInRole(txtusuario.text,) Then
            Roles.AddUserToRole(txtusuario.text, "Administrador")
            Response.Write("Usuario asignado al rol")
Else
       Response.Write("Este usuario ya se encuentra agregado a el rol especificado")
End If

 

2.- Crear Roles.

rolescreate

Dentro de el puedes hacerlo de la siguiente manera :

Verificas si el rol no existe, de ser cierto, entonces lo crea.

rolesexits

if (!Roles.RoleExists("Administrador"))
{
    Roles.CreateRole("Supervisor");
}
else
{
    Response.Write("El rol ya existe");
}

Hecho en VB.NET

If Not Roles.RoleExists(txtroles.Text) Then
    Roles.CreateRole(txtroles.Text)
Else
    Response.Write("El rol ya existe")
End If

 

3.- Obtener todos los Roles existentes.

Si deseas obtener una lista de todos los roles existentes en la base de taos puedes hacerlo de la siguiente manera:

He tomado para este ejemplo un GridView para mostrar la información.

rolesAll

string[] arrayroles = Roles.GetAllRoles();

this.GVRol.DataSource = arrayroles;
this.GVRol.DataBind();

 

4.- Remover Usuario desde Rol Seleccionado

rolesremove

Para remover el usuario desde un rol seleccionado se hace de la siguiente manera:

Roles.RemoveUserFromRole(this.txtusuario.text, "Administrador");

Si cargas los roles en un control, por ejemplo un ListBox, puedes hacerlo así:

Roles.RemoveUserFromRole(this.txtusuario.text, RolesListBox.SelectedItem.Value);

 

Nota: existen mas roles existentes, este articulo denota algunos.

No olviden dejar su comentario, ayudan a crecer.

Espero seas de gran ayuda esta informacion, hasta la próxima.

Saludos…

comentarios
  1. cesar dice:

    Hola muy buena expliacacion pero como le hago para verificar si el usuario pertence a un determinado rol para saber que es lo qeu pueda realizar dependiendo si es administrador o usuario gracias

  2. Nelson Gomez dice:

    Hola cesar espero estes bien.

    Bueno puedes hacer lo siguiente:

    para “SABER SI EL USUARIO EXISTE EN UN DETERMINADO ROL” hay un metodo que se llama IsUserInRole el cual recibe 2 parametros. “string username”, string rolName” con eso tu puedes verificar si el usuario existe en un determinado rol.

    if (Roles.IsUserInRole(this.txtusuario, “Tu Rol”))
    {
    …… Colocas Tu logica ……
    }
    Nota: Avisame si solucionastes.
    Saludos espero sea de gran ayuda mi respuesta.

    Nelson Gomez…

  3. erick dice:

    Gracias, un gran aporte.

  4. Anamaría dice:

    hola… llegue aca por unas dudas que tengo con respecto de los roles.
    1.- Sé que los roles los puedes crear con la herramienta que te da el mismo asp.net(Web Site Administration Tool)
    2.- Sé que los usuarios tambien los puedes crear en esta herramienta y asociarlos a los roles.
    3.- Sé que hay que agregar en el web.config los permisos respectivos…

    Pero.
    Yo tengo una tabla donde estan los users con su rol respectivo. Mi motor es Postgresql 8.2
    Mi aplicacion está validando el usuario y ahora quiero implementar los roles. Asi esta hasta el minuto (validando solo el usuario):

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
    if (ValidateUser(Login1.UserName, Login1.Password))
    {
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
    }

    }
    private bool ValidateUser(string userName, string passWord)
    {
    string lookupPassword = null;
    string sql = null;
    string Strconn = ConfigurationManager.ConnectionStrings[“StrConexion”].ConnectionString;
    NpgsqlConnection pgConn = new NpgsqlConnection(Strconn);

    sql = “select us_pass from user_sistema where id_user = ‘” + userName + “‘”;

    NpgsqlCommand pgCMD = new NpgsqlCommand(sql, pgConn);

    pgConn.Open();

    //recuperamos la password de la base
    lookupPassword = (string)pgCMD.ExecuteScalar();

    pgConn.Close();
    pgConn.Dispose();
    //si no hay resultados, se devuelve falso
    if (null == lookupPassword)
    {
    return false;
    }

    //se compara la password de la base con la digitada, usando case sensitive
    return (0 == string.Compare(lookupPassword.Trim(), passWord.Trim(), false));
    }

    Entonces…. debo obtener el rol desde la BD? o ¿Debo obtener el rol desde la aplicacion?(cuando agregamos los roles por el Web Site Administration Tool) ¿Donde se guardan estos ultimos roles? ¿me afectan a otras websites que tengo corriendo en el mismo server? segun mi arquitectura ¿como implementarias los roles en la aplicacion?
    Muuuuuuchas Graaaacias por tu tiempo !!

  5. Edgar dice:

    Excelente aporte….. corta explicación y efectivo

  6. tavo dice:

    me sirvio el tutorial, gracias.
    De que forma puedo resolver que cuando un usuario haga un logout, al dar al boton regresar no vuelva a entrar al area restringida, ya q cuando vuelve al area restringida y se refresca la pagina entonces si manda a login, como podre resolver esto.
    De antemano gracias

  7. maria dice:

    hola….. Como puedo poner el rol Administrador pero conectodo a la base de datos…..Urge….Gracias

    • Nelson Gomez dice:

      Hola espero estes bien.
      bueno si estas trabajando con la api membership de asp.net y por lo que logro entender, tu lo que quieres es almacenar el rol administrador en la db.

      De ser asi, por favor corrigeme lo haces de la siguiente manera:

      Roles.CreateRole(“Administrador”);

      Y automaticamente el se almacena.

      saludos…

  8. Hola muy buena información, pero me gustaría que me ayudaran con lo siguiente:

    Al crear un Rol deseo asignarle los permisos sobre una carpeta especifica.

    Gracias de antemano

    • Nelson Gomez dice:

      Hola muy buen dia.

      puedes hacer lo siguiente, en tu folder que deseas tener permisos, agrega un archivo web.config en donde le colocas lo siguiente:

      Dentro del tab Authoritation colocas allow roles =”Admin” y deny users=”*”
      Nota: Admin es un rol de ejemplo.

      Ahi le estas diciendo que permita a usuarios con rol admin y que deniegue a todos los usuarios siempre y cuando no posean el rol admin.

      Espero haberte ayudado.

  9. mariano dice:

    Hola, me gustaria saber como hacer para asignar un Rol a un usuario que se esta creando, los roles ya estan creados, y al Registrar un usuario, me gustaria agregar un control al CreateUserWizard y seleccionar el Rol y que se le asigne al usuario que se esta creando.
    Muchas Gracias

  10. Agustin Gutierrez dice:

    Hola tengo una consulta:
    Yo tengo una tabla de personas creada por mi, donde cada persona es de un tipo( es un sistema de gestion academica, tengo alumno docente o administrativo). Yo lo que quiero ahcer es para cada tipo de persona se habiliten las paginas a las que puede acceder y ademas para cada tipo manejar un menu distinto. No tengo mucha idea si eso se puede hacer con roles.
    Muchas Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s