【问题标题】:How to make page in Main-Bar hidden to everyone but Admins? [closed]如何使主栏中的页面对除管理员以外的所有人隐藏? [关闭]
【发布时间】:2018-12-17 05:13:43
【问题描述】:

几乎不言自明,因为如果我输入 [Authorize (Roles="Admin")],页面在主栏中仍然可见,并且我希望它对所有人隐藏,除非以管理员身份登录。

【问题讨论】:

  • 您需要在生成导航的代码中添加 if 并检查当前用户的角色类型 - 如果是管理员则显示链接。但是这个问题太宽泛了,因此不适合 SO。请访问help centre 查看how to ask a good question 以及该站点的on topic 的问题类型
  • 你把[Authorize (Roles="Admin")]放在哪里了?关于控制器方法?菜单是如何生成的..?
  • 如果您将授权属性放在呈现“联系”页面的控制器操作上,那很好,因为它会阻止非管理员通过 URL 手动访问它,而不是单击链接。所以不要把它拿走。但是菜单中的超链接是完全独立的。为此,正如 Pete 所说,您需要在视图的 Razor 代码中放置一个 if 以检查用户的当前角色,并根据他们是否处于 Admin 角色或不是。
  • 我把 [Authorize (Roles="Admin")] 放在 Contact is HomeController 后面,我不确定在哪里以及如何做才能使整个东西在主栏中不可见,不仅是为了限制对它的访问页。基本上我在做我的第一个学校项目,所以我不是“专家”,如果你知道我的意思,所以如果有人能更深入地告诉我在哪里以及如何通过这些检查生成“if”,我将不胜感激。
  • 是的,这就是一般的想法。您可能需要在 if 之前添加一个 @ - 检查 Razor 块的语法。另外你可能想要 User.IsInRole()

标签: c# html asp.net-core


【解决方案1】:

在 _Layout.cshtml 中,您需要进行以下更改:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
        <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
        @if (User.IsInRole("Admin"))
        {
            <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
        }
    </ul>
</div>

【讨论】:

  • 谢谢,这就是我所要做的,它有效!
猜你喜欢
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2012-07-26
相关资源
最近更新 更多