假设我的控制器操作仅限于某些用户,例如:
[Authorize(Roles="somerole")]<br />
public ActionResult TestRestricted() {
return View();
}
在一个视图中,这对每个人都是公开的,我有一个指向上面定义的操作的链接:
<%= Html.ActionLink("Click here!", "TestRestricted") %>
我想要做的是为每个不允许执行“TestRestricted”-action的人隐藏链接。有没有办法检查当前用户是否有权使用相应的操作?除了授权过滤器之外,没有定义任何额外的或重复的访问规则?
答案 0 :(得分:2)
MVC框架中没有任何东西可以在如此精细的级别上控制权限。
第一种方法
这是迄今为止最简单的方法。缺点是必须将角色分配给每个操作链接。
您可以做的是编写一个Action HtmlHelper来控制链接级别的权限。确保包含名称空间System.Web.Mvc.Html
。
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string role)
{
MvcHtmlString link = new MvcHtmlString(string.Empty);
if (htmlHelper.ViewContext.RequestContext.HttpContext.User.IsInRole(role))
{
link = htmlHelper.ActionLink(linkText, actionName);
}
return link;
}
<%= Html.ActionLink("Click here!", "TestRestricted", "somerole") %>
第二种方法
您可以使用反射来发现被调用的动作(方法)。一旦发现,对属性的简单检查将告诉您是否存在authorize属性以及它的设置角色。
答案 1 :(得分:1)
我也在试图找到这个问题的答案......