De las propuestas que me hicieron saqué las siguientes conclusiones que comparto.
Trabajando con una plantilla con distintos bloques para distintos usuarios el problema es que si tengo usuarios nuevos tengo que tocar la plantilla. Además si esta cuestión se me presenta en un número creciente de páginas debería tener un número creciente de plantilla con este tratamiento y la perpectiva es que se hace muy difícil de mantener.
Además lo información a renderizar discriminada por usuario puede llegar a ser muy poca (por ejemplo 2 columans en el medio de una tabla más grande) y enhebrada con todo el resto con lo cual no es tan clara y directa la división en bloques.
Crear una plantilla por cada role tiene consecuencias similares al párrafo anterior. Si en la mayoría de las páginas del sistema tengo que discrimir información por rol se me generaría una cantidad de plantillas muy grande: (cantidad de roles * cantidad de páginas del sistema).
La solución de @Secutiry me pareció un poco rígida. Si en el sistema hay pocos roles y fijos puede funcionar, pero mi idea a futuro es que cada usuario más allá del rol pueda tener permisos personalizados sobre cada acción. Además preferiero que las posibles modificaciones a los permisos de los usuarios o los roles impliquen, tal vez, modificar datos de una tabla antes que ir a tocar una annotation a los Action involucrados.
Finalmente decidí resolver el problema centralmente en el controller. Preparo la información en "paquetes" para pasarle al template y en el controller manejo isgranted para ver que "paquete" va lleno o vacío. Luego paso al tempate todas las variables que contienen los paquetes de información y en el template, antes de mostrar la información, pregunto si la variable contiene algo o no.
De esta forma toda modificación a los roles o los permisos de los roles impactan en el controller. En los template no se hace mención a ningún rol ni hace falta modificarlos en caso de haber cambios en los permisos.
Que les parece?
gracias a todos
Marcelo