Actualmente estoy escribiendo un sitio Admin MVC 3, y cada usuario solo tiene acceso a ciertas partes del sitio.asp.net MVC 3 aplicando AuthorizeAttribute a las áreas
Las áreas de mi sitio son las mismas que las Roles de usuario, entonces lo que me gustaría hacer es colocar el atributo Autorizar en cada área, usando el nombre del área como el parámetro en el Rol.
Hasta ahora lo he hecho funcionar cuando estoy codificando la verificación de cada área, pero me gustaría recorrer todas las áreas y aplicar el filtro Autorizar. (estoy usando esto como mi costumbre FilterProvider - http://www.dotnetcurry.com/ShowArticle.aspx?ID=578)
Mi código hasta el momento ("Gcm" es una de mis áreas, y es también un rol):
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
// for all controllers, run AdminAuthorizeAttribute to make sure they're at least logged in
filters.Add(ObjectFactory.GetInstance<AdminAuthorizeAttribute>());
AdminAuthorizeAttribute gcmAuthroizeAttribute = ObjectFactory.GetInstance<AdminAuthorizeAttribute>();
gcmAuthroizeAttribute.Roles = "Gcm";
var provider = new FilterProvider();
provider.Add(
x =>
x.RouteData.DataTokens["area"] != null && x.RouteData.DataTokens["area"].ToString() == "Gcm"
? gcmAuthroizeAttribute
: null);
FilterProviders.Providers.Add(provider);
}
¿alguien sabe cómo para obtener todas las áreas de mi aplicación, así que puedo recorrerlas, en lugar de codificar cada área?
O si alguien tiene una mejor idea de cómo Autorizar por área, se lo agradecería.
Gracias por su ayuda Saan
** Advertencia: esta no es una práctica segura. ** He estado mirando esta misma área, y encontré que esta no es una práctica recomendable. Las áreas son un concepto de enrutamiento, pero los controladores se pueden encontrar y recoger ** incluso si el área no está especificada **. [Levi lo explica aquí] (http://stackoverflow.com/questions/2319157/how-can-we-set-authorization-for-a-whole-area-in-asp-net-mvc/2320419#2320419) – Quango