¿Cómo configuro una función predeterminada para un nuevo usuario que usa la Autenticación de Windows con SqlRoleProvider?

votos
1

Tengo una aplicación que usa la Autenticación de Windows y un SqlRoleProvider para la autenticación del usuario y la administración de roles, respectivamente. Está funcionando bien con mis usuarios de prueba que he agregado a la base de datos como valores predeterminados. La aplicación requiere que los usuarios inicien sesión (usando las credenciales de Windows) y luego puedan usar esta aplicación interna como un usuario básico. Si el usuario necesita ser agregado a un rol de alto nivel, un administrador sería responsable de esto luego del primer inicio de sesión.

Dicho esto, ¿cómo agregaría un usuario a la función predeterminada cuando primero inicie sesión? Lógicamente, sé que necesitaría llamar a Roles.IsUserInRole () y luego agregarlos si no lo están; Sin embargo, ¿dónde haría esto? Tengo problemas para localizar qué evento en Global.asax debo usar.

Gracias

EDITAR: Para ampliar un poco el escenario, no estoy usando un sistema de proveedor de membresía completo debido a los requisitos para escribir nuevos proveedores que permitan que la cadena de conexión se almacene fuera del web.config. No utilizo ningún formulario de registro o página de inicio de sesión y el hecho de que la Autenticación integrada de Windows en IIS maneje los aspectos de autenticación mientras que mi SqlRoleProvider mejorado maneja los roles del usuario. El sistema funciona bien para los usuarios que tengo roles de configuración mediante pruebas codificadas. Solo estoy buscando una manera de agregar nuevos usuarios (que serían autenticados por IIS) para agregarlos inmediatamente a una función predeterminada de Usuarios. Creo que lo encontré; sin embargo, ahora estoy examinando formas de hacer que no se active en cada solicitud por motivos de rendimiento.

Publicado el 09/12/2008 a las 21:13
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

Pude localizar la solución después de cavar y jugar un poco más. Agregué el siguiente código a mi archivo Global.asax y está logrando lo que esperaba.

protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
    {
        Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
    }
}

Me preocupa porque este código se activa con cada solicitud de página. ¿Hay una mejor manera de limitar cuándo ocurre esto? ¿Debería agregar este código al evento page_load de la página de destino en lugar de a Global.asax?

Respondida el 09/12/2008 a las 21:51
fuente por usuario

votos
0

¿Por qué no ponerlo cuando inicie sesión o se registre?

Cuando inicie sesión, maneje ese evento y colóquelo. Verifique cada vez que inicie sesión.

Respondida el 09/12/2008 a las 22:08
fuente por usuario

votos
0

Agregaría la función predeterminada al usuario directamente después de que el usuario fue recuperado.

Algo como tal:

user = Membership.GetUser()
if (user != null)
{
  // default role 
  string[] defaultRoles = {"MyRole"};

  AddUsersToRoles(user, defaultRoles); 

}
Respondida el 09/12/2008 a las 21:23
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more