Estoy tratando de proteger mis rutas MVC de un conjunto de usuarios que cumplen un conjunto de criterios. Dado que MVC parece usar atributos bastante y Steven Sanderson usa uno para la extensibilidad de la seguridad en su libro pro MVC, comencé a seguir esta ruta, pero me gustaría definir la regla contextualmente en función de la acción a la que la estoy aplicando.Pasar Func como un parámetro de atributo para asegurar las rutas MVC
Algunas acciones son solo para empleados, otras no.
Algunas acciones son solo para company1, otras no.
Así que estaba pensando este tipo de uso ...
[DisableAccess(BlockUsersWhere = u => u.Company != "Acme")]
public ActionResult AcmeOnlyAction()
{
...
}
[DisableAccess(BlockUsersWhere = u => u.IsEmployee == false)]
public ActionResult EmployeeOnlyAction()
{
...
}
ve bastante limpio para mí y es realmente bastante fácil de implementar, pero me sale el siguiente error de compilación:
'BlockUsersWhere' no es un argumento de atributo con nombre válido porque no es un parámetro de atributo válido tipo
Aparentemente no se puede usar un Func como argumento de atributo. ¿Alguna otra sugerencia para evitar este problema u otra cosa que proporcione el uso simple que hemos llegado a amar en nuestros proyectos de MVC?
Gracias, esto es lo primero que pensé, pero con este enfoque pierdo la capacidad de crear reglas únicas en un contexto sin tener que actualizar la clase de atributo. Es probable que me dirija a esta ruta. – jjr2527
Sí, los atributos solo pueden transmitir una cantidad limitada de información. Realmente deberían ser solo acerca de la asignación de metadatos. Comportamientos más complejos pertenecen en el código. – marcind