ASP.NET MVC-根据Microsoft Active Directory服务角色显示/隐藏指向网页的链接

时间:2019-01-25 14:43:17

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

这就是我想要做的: 我的(很小)网络应用程序公开了一种供公众使用的表单。在该表格上的链接仅对那些被分配担任我公司某个部门角色的人员可见:通过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

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

1 个答案:

答案 0 :(得分:0)

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

从您的web.config中取出[Authorize(Roles = "Marketing")] 标签。而是使用AuthorizeAttribute将角色应用于您的控制器(或单个操作),如下所示:

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

使用Windows身份验证,角色是AD组,因此您必须在与服务器相同的域中有一个组,名为“ Marketing”,才能正常工作。如果该组位于其他域上,则需要指定域,例如

-- Query #1: running time 2m 48s, cost 1000017902760.42
explain
select 
    first_value(timestamp) over (order by timestamp rows 
        between unbounded preceding and unbounded following)
from table_with_timestamps as l
limit 1
;
-- Query #2: running time 10 sec, cost 1549471.30
explain
select 
    min(timestamp)
from table_with_timestamps