2

我需要能够收紧我的业务层——访问特定数据。UI 可以调用业务层并接收用户详细信息。然后 UI 可以对用户调用 .Save() ,业务层将调用数据访问层来保存用户。

虽然,这里的问题是我不只是希望任何用户能够接收用户详细信息并调用保存 - 只有具有“管理员”角色的经过身份验证的用户。我将如何在我的业务层/UI 中进行此身份验证/授权,以便实现此目的?

我正在为我的 UI 使用 ASP.NET,并且我已经阅读了成员资格/角色提供程序,但这似乎只是针对实际 UI。我需要在我的业务层保护它,因为将来可能会有几个不同的 UI。例如 windows 窗体和 Asp.net。

想法和建议表示赞赏。

谢谢。

4

2 回答 2

1

您可能想要研究的另一种方法(如果在 .NET 3.5 / 4.0 中开发)是使用Windows Identity Foundation

如果您有兴趣将您的授权逻辑保留在您的网站之外(如果您希望从多个前端使用您的业务层,我假设您会这样做)我绝对建议您查看 WIF。您还可以使用ADFS v2.0(它是 Windows Server 2008 R2 中的服务器角色)与 Active Directory 集成。

Patterns & Practices 发布了一个指南,对于深入研究这个主题非常有用。

于 2010-07-19T00:39:07.263 回答
0

ASP.NET 角色/成员资格提供程序包括您可以重用的存储和代码级组件——它们不仅仅是 UI。

对于细粒度的访问控制(例如页面上的特定功能),您可以使用企业库。您将能够重用代码来保护 BL 层和 UI 层的功能。

您最想要的链接是这个:确定用户是否被授权执行任务

另见:

在 EntLibs 的早期版本中,授权管理器是一个关键组件,但在最近的版本中,它不是一个严格的要求,而是您可以使用AuthorizationRuleProvider. 请参阅:使用 Windows 授权管理器开发应用程序

根据数据的复杂性、数据量和性能需求,过滤数据会有点问题。

  • 一种策略是使用一个简单的 DAL 来返回所有内容,并删除当前用户不允许在 BL 中看到的数据。
  • 设计一个对您的应用程序使用的角色有一定了解的 DAL: 但这有点危险,因为您将被束缚在使用这些角色上DAL.GetCustomersForAdmin()DAL.GetCustomersForMember()
  • 拥有一个具有安全意识的数据库/DAL,并且始终通过相同的方法仅返回允许用户查看的数据:DAL.GetCustomers()
于 2010-07-19T00:29:35.097 回答