允许用户基于其Windows域登录来查看网页的部分内容

本文关键字:网页 登录 许用户 用户 Windows 于其 | 更新日期: 2023-09-27 18:21:03

我目前正在做一个小而简单的项目。我有一个存储在数据库中的用户列表,如下所示:

Id, FirstName, LastName, PhoneNo, DomainAC

我已经在ASP.NET网页上显示了此信息,不确定现在如何进行。我现在希望:

  • 根据测试数据库中表的Domain Account字段当前用户的Windows域登录名
  • 仅当他们是同一用户时,才允许他们编辑其详细信息
  • 确保这是安全的。

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Employees>>" %> 
     <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
      Index
    </asp:Content> 
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
        <h2>Index</h2> 
        <table>
            <tr>
                <th></th>
                <th>
                    Id
                </th>
                <th>
                    FirstName
                </th>
                <th>
                    Last Name
                </th>
                <th>
                    Phone No.
                </th>
                 <th>
                    Domain A/C
                </th>
            </tr> 
        <% foreach (var item in Model) { %>
    
            <tr>
                <td>
                    <%= Html.ActionLink("Edit", "Edit", new { id=item.Id }) %> |
                    <%= Html.ActionLink("Details", "Details", new { id=item.Id })%>
                </td>
                <td>
                    <%= Html.Encode(item.Id) %>
                </td>
                <td>
                    <%= Html.Encode(item.FirstName) %>
                </td>
                <td>
                    <%= Html.Encode(item.LastName) %>
                </td>
                <td>
                    <%= Html.Encode(item.PhoneNo) %>
                </td>
                <td>
                    <%= Html.Encode(item.DomainAC) %>
                </td>
            </tr>
    
        <% } %> 
        </table> 
        <p>
            <%= Html.ActionLink("Create New", "Create") %>
        </p> 
    </asp:Content>
    

我现在如何才能让上面的"编辑"功能只在域a/c与您当前登录名匹配的情况下工作,除非您以用户"管理员"的身份登录,否则您可以编辑所有内容。

非常感谢。

允许用户基于其Windows域登录来查看网页的部分内容

Simon,

你用asp.net-mvc标记这个问题,所以我将在此基础上给出一个快速的例子。

在控制器中,您可以装饰整个控制器,也可以仅装饰具有Authorize属性的操作。这意味着您可以明确地只允许特定角色中的用户访问该函数。

举个简单的例子:

[Authorize(Roles = "AdminRole, CreditAdvisorRole")]
public ActionResult Edit()
{
    var viewModel = _shopService.ShopIndex();
    return View(viewModel);
}

因此,该示例只允许在"AdminRole"answers"CreditAdvisorRole"角色中定义的用户访问该功能。当然,这是内在的行为,在某个时候,你会遇到这种方法的局限性。此时,您可以继续前进,并在AuthorizeAttribute上创建自己的覆盖。

此外,由于您没有使用Forms身份验证,您将不得不探索更广泛的选项,但覆盖可能会引导您走上这条路(通过active directory重新获取信息并应用类似的基于角色的逻辑)。

SO上有几个很好的例子。这一个特别吸引了我(见JohnnyO的回答):

ASP.NET MVC中的非字符串角色名称?

享受。。