允许用户基于其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与您当前登录名匹配的情况下工作,除非您以用户"管理员"的身份登录,否则您可以编辑所有内容。
非常感谢。
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中的非字符串角色名称?
享受。。