我写了一个从System.Web.Mvc.AuthorizeAttribute派生的自定义授权属性。我从我的控制器成功使用它来限制对某些功能的访问。如何避免授权码逻辑的重复
public class ArticleController : Controller
{
[CustomAuthorize(Role.Administrator)]
public ActionResult Delete(int id)
{
// ...
}
}
而且工作正常。现在我想根据相同的授权逻辑显示或隐藏HTML元素。例如,在我看来的“文章”中,如果用户不是管理员,我想隐藏操作按钮“删除”。我已经写了这样的事情:
<ul id="menu">
<li>@if (User.IsInRole(Role.Administrator)) {
@Html.ActionLink("Delete", "Delete", "Article", new { id = article.ID }, null)
} </li>
</ul>
它的工作原理也很有效,但它创造的代码逻辑复制,因为我需要指定两次必要credientials要执行的操作:
- 在控制器阻止或允许该行为。
- 用于显示或隐藏操作链接。
什么是避免这种重复的最好方法?有没有办法从视图中重用我的自定义授权属性?