2011-03-14 8 views
5

Estoy usando AspNetSqlMembershipProvider y creé mis páginas para el aprovisionamiento. Ahora que tengo este trabajo, me pregunto cuál es la mejor manera de utilizar la seguridad en todo el sitio. Para los controladores, puedo usar [Autorizar], pero, ¿a dónde voy después? Quiero decir, ¿acabo de desordenar las vistas con Roles.IsUserInRole, y en qué otro lugar debo poner cheques? ¿Algún buen ejemplo de sitios sobre cómo lidiar con esto?MVC3 Consejos de seguridad

Respuesta

7

No, usted no debe estorbar sus puntos de vista con Roles.IsUserInRole, eso no es responsabilidad de una vista para comprobar papeles, eso es un controlador/autorizar el trabajo de filtro para poblar el modelo de vista para que la vista es suficiente:

@if (Model.ShouldDisplaySomeSection) 
{ 
    ... // some section 
} else { 
    ... // not authorized 
} 

También tenga en cuenta que si decora una acción de controlador con el atributo estándar [Authorize] y un usuario no tiene suficientes roles, esta acción podría nunca ejecutarse y la vista nunca llegaría.

Personalmente encuentro Developer Highway Code como una lista de verificación de seguridad extremadamente útil, incluso si no está restringida a MVC.

+0

+1 para el enlace del código de la autopista para desarrolladores ... ¡es increíble! – Mahin

3

creé una solución en la que I derivado de atributo Authorize y en mi propio atributo introduje una matriz param[] de un tipo llamado enumUserRoles, por lo que me salto las cuerdas mágicas.

Luego, por el desorden de las vistas. Bueno, supongo que deberías preguntarte cuando estás a punto de escribir IsUserInRole en la vista si realmente deberías escribir eso allí. Creo que deberías tratar de mantener las vistas lo más limpias posible e intentar ordenar tanto como sea posible en el ViewModel. Y si no puedes hacer eso, considera un HTML Helper.