【发布时间】:2011-02-23 11:40:42
【问题描述】:
我编写了一个从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>
它也可以正常工作,但它会创建代码逻辑重复,因为我需要指定两次必要的凭据来执行操作:
- 在控制器中阻止或允许操作。
- 在视图中显示或隐藏操作链接。
避免这种重复的最佳方法是什么?有没有办法从视图中重用我的自定义授权属性?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 authorization