【问题标题】:ASP.NET MVC - show/hide link to webpage based on microsoft active directory service roleASP.NET MVC - 显示/隐藏基于微软活动目录服务角色的网页链接
【发布时间】:2019-01-25 14:43:16
【问题描述】:

这就是我想要做的事情: 我的(非常小的)网络应用程序公开了一个供公众使用的表单。该表格上的链接应该只对我公司中被分配到某个部门角色的人可见:通过 Microsoft 的 Active Directory 进行的“营销”。这是我第一次使用 Microsoft 的 Active Directory 和任何形式的身份验证,所以请保持温和。

我已经在 IIS 和我的 web.config 文件中对站点的权限进行了更改,在根目录下,我添加了:

<authentication mode="Windows"/>
 <authorization>
  <allow roles="Marketing"/>
  <deny users="*" />
</authorization>

在表单页面的代码中,链接通过以下方式暴露:

@if (User.Identity.IsAuthenticated)
    {
        <p>@User.Identity.Name</p>
        <p></p>
        @Html.ActionLink("Access to Backend", "Index", "Requests")
    }

我意识到这样做会使角色之外的人无法访问整个表单,因为上面的代码不会将身份验证限制为链接,而是应用于整个站点(因为它位于根级别)。

网站结构如下:

--Form Page (open to public)
 /Form (with hidden link to the Backend Page/Counts) -- needs to be hidden
---Backend Page (restricted to Marketing page)
 /Counts
 /Edit
 /Delete
 /Details

如何将其限制为一个小链接,然后将网站“后端”页面的访问权限限制为营销页面中的那些?

【问题讨论】:

    标签: asp.net asp.net-mvc windows-authentication directoryservices


    【解决方案1】:

    我知道这已经一个多月了。抱歉没有看。也许你找到了答案,但我还是会分享。

    从您的 web.config 中取出 authorization 标签。相反,使用AuthorizeAttribute 将角色应用于您的控制器(或单个操作),如下所示:

    [Authorize(Roles = "Marketing")]
    

    使用 Windows 身份验证时,角色是 AD 组,因此您应该在与服务器相同的域中拥有一个名为“Marketing”的组才能正常工作。如果组在不同的域上,那么您需要指定域,例如

    [Authorize(Roles = "DOMAIN\Marketing")]
    

    【讨论】:

    • 谢谢@gabrielluci!这正是我经过大量试验和错误后所做的。我还在 html 文件中添加了 code @if (User.IsInRole("Marketing") { @*

      @User.Identity.Name

      *@ @Html .ActionLink("Admin Page", "Index", "Requests", null, new { @class= "btn btn-primary" }) } code 根据用户角色隐藏/显示按钮。
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多