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

StackOverflow https://stackoverflow.com/questions/354068

Pregunta

Tengo una aplicación que utiliza la autenticación de Windows y un SqlRoleProvider para la autenticación de usuarios y la gestión de roles, respectivamente. Funciona 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 (con credenciales de Windows) y luego puedan usar esta aplicación interna como & Quot; usuario & Quot ;. Si el usuario necesita ser agregado a un rol de alto nivel, un administrador sería responsable de esto después del primer inicio de sesión.

Dicho esto, ¿cómo agregaría un usuario a la función predeterminada cuando inicie sesión por primera vez? 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 utilizar en Global.asax.

Gracias

EDITAR: Para expandir un poco el escenario, no estoy usando un sistema de proveedor de membresía completo debido a los requisitos para escribir nuevos proveedores para permitir que la cadena de conexión se almacene fuera de web.config. No estoy utilizando ninguna forma de registro o página de inicio de sesión y dejo que la autenticación integrada de Windows en IIS maneje los aspectos de autenticación mientras mi SqlRoleProvider mejorado gestiona los roles de los usuarios. El sistema funciona bien para los usuarios que tengo roles de configuración a través de pruebas codificadas. Solo estoy buscando una manera de agregar nuevos usuarios (que serían autenticados por IIS) para que se agreguen inmediatamente a un valor predeterminado & Quot; Users & Quot; papel. Creo que lo encontré; sin embargo, ahora estoy examinando formas de hacer que no se active en cada solicitud por motivos de rendimiento.

¿Fue útil?

Solución

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 ya que este código se dispara con cada solicitud de página. ¿Hay una mejor manera de limitar cuando esto ocurre? ¿Debo agregar este código al evento page_load de la página de destino en lugar del Global.asax?

Otros consejos

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

Algo así:

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

  AddUsersToRoles(user, defaultRoles); 

}

¿Por qué no ponerlo al iniciar sesión o registrarse?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top