如何根据MVC3中的属性中定义的角色隐藏选项卡?

问题描述:

在MVC3网站的默认安装中,标签是在左上角创建的。我想根据当前用户是否有权访问索引ViewResult来隐藏/显示这些选项卡。 ViewResult允许的角色由属性定义。有没有办法获得ViewResult的角色列表?如何根据MVC3中的属性中定义的角色隐藏选项卡?

+1

你的问题没有很好的解释,你能问一下吗? – IamStalker

如果你问(对不起,是不完全清楚,我)约基于角色的HTML元素的条件显示,你可以做这样的事情:

@if (User.IsInRole("Administrators")) 
{ 
    @Html.ActionLink("Do Some Action", "DoAction", "SomeController") 
} 

如果不是你在问什么,让我知道。


后续根据您的评论:

你的问题让我感兴趣的,我做了一个小闲逛,发现费雯丽CHEVALLIER有一个有趣的想法here基本上可以让你写的东西,像这样:

@Html.ActionLinkAuthorized("The Privilege Zone", "ThePrivilegeZone", "Home", true)

在您查看

,然后这个检查控制器的动作,要么呈现一个链接或没有。

在他的控制例子,你有一个这样的动作:

[Authorize(Roles = "Administrator")] 
public ActionResult ThePrivilegeZone() 
{ 
    return View(); 
} 

(我想这里的关键是,你的视图不知道蹲关于“管理员”和依赖于扩展代码做繁重的位置:

public static MvcHtmlString ActionLinkAuthorized(
    this HtmlHelper htmlHelper, 
    string linkText, string actionName, string controllerName, 
    RouteValueDictionary routeValues, 
    IDictionary<string, object> htmlAttributes, bool showActionLinkAsDisabled) 
{ 
    if (htmlHelper.ActionAuthorized(actionName, controllerName)) 
    { 
     return htmlHelper.ActionLink(
     linkText, 
     actionName, controllerName, routeValues, htmlAttributes); 
    } 
    else 
    { 
     if (showActionLinkAsDisabled) 
     { 
     TagBuilder tagBuilder = new TagBuilder("span"); 
     tagBuilder.InnerHtml = linkText; 
     return MvcHtmlString.Create(tagBuilder.ToString()); 
     } 
     else 
     { 
     return MvcHtmlString.Empty; 
     } 
    } 
} 

不是剪切/粘贴代码的全部,在这里,你可以看看,看看他有该示例应用程序,我认为有什么特别有趣的这个方法是查看可能是显示PrivilegeZone链接,但只知道别的东西会确定是否是这种情况。因此,假设你有新的要求,只允许“管理员”或“所有者”的人访问链接,则可以相应地修改控制器操作,而不是触摸视图代码。有趣的想法,至少对我来说。

+0

对不好写的问题。这几乎是我正在寻找的东西,除了声明角色(如管理员)之外,还可以获取已通过操作属性授予操作权限的角色列表?这样我可以在一个属性中设置角色,链接将自动显示或不显示。 – Dale

+0

查看我添加到我的答案中的信息是否有帮助。 – itsmatt

+0

这非常有帮助。谢谢。 – Dale