He escrito un atributo de autorización personalizado derivado de System.Web.Mvc.AuthorizeAttribute. Lo estoy usando con éxito desde mis controladores para restringir el acceso a ciertas funciones.Cómo evitar la duplicación de la lógica del código de autorización
public class ArticleController : Controller
{
[CustomAuthorize(Role.Administrator)]
public ActionResult Delete(int id)
{
// ...
}
}
Y eso funciona bien. Ahora quiero mostrar u ocultar elementos HTML de acuerdo con la misma lógica de autorización. Por ejemplo, en mi opinión, "Artículo", quiero ocultar el botón de acción "Eliminar" si el usuario no es un administrador. He escrito algo así:
<ul id="menu">
<li>@if (User.IsInRole(Role.Administrator)) {
@Html.ActionLink("Delete", "Delete", "Article", new { id = article.ID }, null)
} </li>
</ul>
Trabaja muy bien también, pero crea código de la lógica duplicación porque necesito para especificar el doble de credientials necesarios para realizar una acción:
- En el controlador bloquear o permitir la acción.
- En la vista para mostrar u ocultar el enlace de acción.
¿Cuál es la mejor forma de evitar esta duplicación? ¿Hay alguna forma de reutilizar mi atributo de autorización personalizado de las vistas?