1

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

Id, FirstName, LastName, PhoneNo, DomainAC

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

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

    <%@ 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 与您当前的登录名匹配时才有效,除非您以用户“管理员”身份登录,否则您可以编辑所有内容。

非常感谢。

4

1 回答 1

1

西蒙,

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

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

举个简单的例子:

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

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

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

SO上有几个很好的例子。我特别喜欢这个(见 JohnnyO 的回答):

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

请享用..

于 2013-07-05T10:02:07.463 回答