¿Cómo prueba la autorización de una página web utilizando ASP.NET MVC?
-
02-07-2019 - |
Pregunta
Supongamos que tiene una página de perfil a la que solo puede acceder el propietario de ese perfil. Esta página de perfil se encuentra en:
Usuario / Perfil / {ID de usuario}
Ahora, imagino que para evitar que otros usuarios puedan acceder a esta página, puede estructurar la función de Perfil de su clase UserController para verificar la identidad de la sesión actual:
HttpContext.Current.User.Identity.Name
Si la identificación coincide con la de la url, entonces continúa. De lo contrario, redirigir a algún tipo de página de error.
Mi pregunta es ¿cómo haces la prueba de unidad en algo como esto? Supongo que necesita usar algún tipo de inyección de dependencia en lugar del HttpContext en el controlador para realizar la verificación, pero no estoy claro cuál es la mejor manera de hacerlo. Cualquier consejo sería útil.
Solución 2
Terminé yendo con el " UserNameFilter " mostrado en entrada de blog . Funciona como un amuleto y es fácil de probar.
Otros consejos
El enlace de arriba es bueno. También agregaría que, en lugar de verificar mediante programación el valor de User.Identity.Name, debería usar los atributos de Autorización como se describe en el artículo:
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
Probablemente pueda hacerlo usando un falso para el contexto del controlador. Echa un vistazo a este artículo: http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx
Aquí es donde entra la burla, con un HttpContext falso.