【问题标题】:Hiding links from certain roles in ASP.NET MVC5在 ASP.NET MVC5 中隐藏某些角色的链接
【发布时间】:2013-08-20 21:08:33
【问题描述】:

所以这听起来可能是个愚蠢的问题,但我如何仅为管理员用户显示链接?

假设普通用户看到以下链接:
主页 / 关于 / 联系方式

管理员用户会看到以下链接:
主页 / 关于 / 联系 / 管理

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

视图可以重载吗?

【问题讨论】:

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

标签: asp.net asp.net-mvc-5 authorization


【解决方案1】:

根据您使用的会员资格/用户提供商的类型,您应该能够直接从视图中检查用户是否已登录并处于特定角色。

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

@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();
}

【讨论】:

  • 检查用户是否已通过身份验证是否属于某个角色的最佳实践(或者可能是出于清晰考虑)?我认为,除非他们告诉网站他们是谁,否则他们不会扮演任何角色,这意味着事先进行身份验证。请注意,我不是质疑选择,而是只是想知道。我在安全方面的技能就像在飞行中的企鹅——看到别人这样做,我自己从来没有这样做过。 (不同的是,我正在利用假期来雄心勃勃地改变这种状态,不像懒惰的企鹅,嗨。)
  • Authorize 属性将默认检查用户是否经过身份验证,然后您可以选择添加角色。
  • 哦,我意识到这还不清楚(显然,读心术不是你的强项,呵呵)。我指的是 first 示例(CSHTML 文件,Razor 标记)中的第 4 行和第 5 行。
  • 这对 AD 组有何作用?当我使用 @if(User.IsInRole("DOMAIN\\Group") 时,我无法让我的操作链接隐藏在我的表格中
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2019-05-23
相关资源
最近更新 更多