2013-08-20 48 views
11

因此,这可能听起来是一个愚蠢的问题,但是如何显示仅用于管理员用户的链接?隐藏ASP.NET MVC5中某些角色的链接

假设一个普通的用户会看到以下链接:
首页/ /联系

而且管理员用户将看到以下链接:
首页/ /联系我们/联系

我试图限制在控制器并链接菜单上的控制器。但它仍然显示每个人的链接,只是不允许访问任何人,但管理员

可以重载视图吗?

+0

这不只是隐藏,你必须评估用户的角色登录......有这么多的答案,这种问题 –

回答

30

根据您使用的是哪种会员资格/用户提供程序,您应该能够直接从视图中检查用户是否已登录并以特定角色登录。

所以你最终会得到类似的东西;

@Html.ActionLink("Index", "Home") 
@Html.ActionLink("About", "Home") 
@Html.ActionLink("Contact", "Home") 
@if (User.Identity.IsAuthenticated){ 
    if (User.IsInRole("Admin")){ 
     @Html.ActionLink("Admin", "AdminController")   
    } 
} 

要记住,[Authorize]属性添加到您的Admin操作方法:

[Authorize(Roles="Admin")] 
public ActionResult Admin() 
{ 
    // ... 
    return View(); 
} 
+1

最好的做法(或者可能是为了澄清)来检查用户是否被认证**和**如果他们在某个角色中?我认为,除非他们告诉网站他们是谁,否则他们不会扮演任何角色,这意味着事先进行身份验证。请注意,我**不会质疑**的选择,但**只是想知道**。我的安全技能就像企鹅在飞行中 - 看到其他人在做,从未做过。 (不同的是,我使用假期来雄心勃勃地改变这种状态,不像懒企鹅hihi。) –

+0

'Authorize'属性会检查用户是否被默认认证,然后你可以选择添加角色。 –

+1

哦,我意识到那不清楚(显然,读心者不是你强烈的一面,嘿嘿)。我指的是** first **样本(CSHTML文件,Razor标记)中的第4行和第5行。 –