6

Vengo de 5 años de experiencia con formularios web ASP.NET, y soy nuevo en ASP.NET MVC. Ahora intento aprender MVC con algunos tutoriales, videos tutoriales y libros.
Estoy usando Visual Studio 2012 y la nueva ASP.NET MVC 4 para crear una pequeña aplicación web para administrar mi cartera de fondos mutuos. Esto debería permitirme entrar en el nuevo patrón y aprender muchas cosas nuevas ...
Mi aplicación también debería permitir que otros amigos hagan lo mismo. Por lo tanto, tiene que administrar diferentes portafolios de usuarios.
He creado una pequeña base de datos con Entity Framework Code First, así que tengo algunos modelos básicos: Fondo, Portafolio, Compartir, Depósito, Fuente y Usuario. Un usuario puede tener muchas carteras con muchos fondos dentro de ellas. Cada usuario tiene su propia lista de depósitos. Cada fondo tiene muchos valores compartidos (uno/día).
El modelo de origen es simplemente una tabla donde pongo una URL para cada fuente de sitio web para compartir datos de un fondo específico. Entonces, un fondo tiene muchas fuentes. Luego uso una clase de raspador para obtener datos de esos sitios web una vez al día.
Esta es la estructura principal de la aplicación. Ahora, necesito saber cuál sería la mejor manera de:ASP.NET MVC Cómo administrar el contenido del usuario utilizando el proveedor de membresía ASP.NET

1) Administrar la cuenta de un usuario.
¿Debo integrar la estructura de la base de datos de membresías de ASP.NET en mi base de datos y usarla en lugar de mi tabla de usuarios personalizada para administrar usuarios?

2) Manejo de contenido de usuario: carteras, fondos, etc.
¿Cuál es el más fácil dey más elegante forma en el patrón MVC, para implementar la autenticación y todas las validaciones de autorización para que el usuario conseguir sus propios datos? ¿Debo verificar esto dentro de cada acción en cada controlador?

Entonces, en otras palabras, ¿cómo debo implementar mis controladores? Por ejemplo:

[Authorize] 
public class PortfolioController : Controller 
{ 
    private FundMonitorContext db = new FundMonitorContext(); 

    public ActionResult Index() 
    { 
     // Check user ID and give back to the view only his portfolios... 

     var portfolio = db.Portfolios.List(); 
     return View(portfolio.ToList()); 
    } 

    ... 

    public ActionResult Details(int id = 0) 
    { 
     ... 
    } 

    //Other actions... 
} 

¡Realmente agradecería cualquier sugerencia!

+1

checkout simplemembershipprovider http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web -forms-and-asp-net-mvc-4-templates.aspx, es una versión más flexible de los proveedores de membresía proporcionada por microsoft –

+0

Bastante interesante. Lo intentaré ... También soy nuevo para los Proveedores de Membresía ASP.NET, ya que he desarrollado la mayoría de mis aplicaciones usando Oracle DB y tablas personalizadas de Usuarios y Perfiles. –

Respuesta

0
  1. Es una elección que tiene que hacer usted mismo pero me gusta crear mi propio proveedor de membresía, y no es tan difícil. Con su propio proveedor puede hacerlo a su manera, no como lo que Microsoft pensó que era genial hace 10 años. Ejemplo: http://www.codeproject.com/Articles/165159/Custom-Membership-Providers.
    En .NET 4.5 es aún más fácil con SimpleMembershipProvider crear su propio proveedor.

  2. Con el atributo [Autorizar] le está diciendo al controlador que solo se aceptará al usuario autorizado. Cuando un usuario inicia sesión, puede poner el nombre de usuario/ID de usuario en la cookie FormsAuthentication, por lo que puede obtener fácilmente el nombre de usuario/ID de usuario. También puede crear tics de autenticación en la cookie si desea incluir más datos en ella.

    Para que sea más fácil de probar, no recomiendo crear un enlace entre HttpContext.User e IPrincipal, http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx.

+0

Ya leí algo sobre la implementación de proveedores de membresía personalizados, pero pensé que mi implementación no sería tan diferente de la integrada de ASP.NET ... Tal vez cambie la función de hash del antiguo predeterminado de SHA1 con algo más confiable SHA256 o SHA512. ¿Cuáles podrían ser otras ventajas en mi escenario? –

+0

Creo que obtendrás muchas entidades en tu base de datos que no vas a usar. Y la mayor pérdida es que no puede hacer ninguna configuración, pero por otro lado ahorra tiempo cuando ya tiene algo que está bien. Pero si cree que el proveedor estándar satisfará sus necesidades, ¿por qué no usarlo? – Rikard

0

Use Identity 2.0 para autenticación y autorización. Encontré este blog http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx bastante útil.Básicamente, usted obtendrá demandas de autenticación basada y luego puede decorar sus acciones con el AuthorizeAttribute como

[Authorize(Roles="Admin, Moderators")] 
public ActionResult MyAction(...) 

y se puede ver en las reclamaciones a través de la propiedad User.Identity en el controlador.

Cuestiones relacionadas