仅当用户被授权查看该页面时,如何显示链接到该页面的按钮?ASP.NET MVC

Chr*_*ris 3 asp.net asp.net-mvc authorization

我有一个 ASP.NET MVC 项目。在这个项目中,用户可以登录我的网站。所有登录的用户都会进入同一页面的登录页面。我的网站有一个单独的部分,仅针对某些用户进行划分。这是在 Web.config 中通过以下内容定义的:

<location path="SectionedOff">
  <system.web>
    <authorization>
      <allow users="user1,user2,user3" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

如果用户已获得此部分的授权,我想在页面上显示一个按钮,每个人在登录时都会重定向到该按钮。这是我想要完成的任务的粗略绘图: 图像 我已经完成了身份验证和适当的授权,我只是不确定如何根据用户是否获得网站单独部分的授权来显示和隐藏此按钮。我隐隐怀疑我必须读取 Web.config 文件才能获取此信息,但是,我不知道如何读取 Web.config 中某个位置的信息。任何帮助,将不胜感激 :)

Nig*_*888 5

<authorization>文件中的部分用于web.config保护虚拟文件和文件夹。它对 MVC 控制器和操作绝对没有影响(当然,除非操作尝试访问物理文件)。

保护 MVC 控制器和操作的正确方法是使用AuthorizeAttribute. 请参阅这篇文章,了解如何将其与属性结合使用的示例AllowAnonymous(推荐的方法是保护所有内容,除非您想选择退出,然后应用该AllowAnonymous属性)。

AuthorizeAttribute取决于IPrincipalIIdentity接口。Microsoft 的所有安全框架(身份、成员身份等)都实现了这些接口,因此它们可以与AuthorizeAttribute. 如果您有自定义安全框架,则应该实现这些接口 - 请参阅此答案

一旦这些实现就位并添加为 HttpContext 的一部分,检查用户是否已登录以及他们是否处于某个角色就非常简单了。

@if (this.User.Identity.IsAuthenticated)
{
    <input type="button" value="Go somewhere that requires logged in user" />
}

@if (new string[] { "user1", "user2", "user3" }.Contains(this.User.Identity.Name))
{
    <input type="button" value="Go somewhere that requires user1, user2, or user3" />
}

@if (this.User.IsInRole("Admin"))
{
    <input type="button" value="Go somewhere that requires an Admin role" />
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用,当相应操作没有权限MvcSiteMapProvider时,它会自动隐藏菜单选项。AuthorizeAttribute

免责声明:我是该项目的主要贡献者MvcSiteMapProvider