2

我需要能够收紧我的业务层 - 访问特定数据。 用户界面可以调用业务层并接收用户定义。然后UI可以调用用户的.Save(),业务层将调用数据访问层来保存用户。在n层架构中的身份验证和授权

虽然,这里的问题是,我不只是想让任何用户能够接收一个userdetail并调用具有“admin”角色的仅保存认证用户。我将如何在业务层/用户界面中进行认证/授权,以便实现这一目标?

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

想法和建议表示赞赏。

谢谢。

+0

你如何在你的层之间进行沟通? WCF,.net远程处理,Web服务? – 2010-07-19 18:42:01

+0

类库参考,但在未来这可能会改变 – Mike 2010-07-19 23:51:16

回答

0

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

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

你最想要的链接是这个:Determining Whether a User Is Authorized to Perform a Task

另见:

在EntLibs的早期版本中,授权经理是一个关键组成部分,但在更新的版本中这不是一个坚定的要求,相反,您可以使用AuthorizationRuleProvider。 参见:Developing Applications Using Windows Authorization Manager

根据数据的复杂程度,数量和性能需求,过滤数据有点麻烦。

  • 一种策略是让一个简单的DAL返回所有内容,并删除当前用户不允许在BL中看到的数据。
  • 设计一个DAL,其中包含您的应用程序使用的角色的一些知识: DAL.GetCustomersForAdmin()DAL.GetCustomersForMember()但是这会有点危险,因为您将被绑定到使用这些角色。
  • 有一个数据库/ DAL就是安全意识,只有总是返回允许用户看到的数据,通过同样的方法:DAL.GetCustomers()
+0

我认为这是我想要的。它看起来很复杂,虽然 – Mike 2010-07-19 01:11:52

+0

许多事情从外面看起来都很复杂 - 但是一旦你进入就不会那么糟糕;一旦你达到了速度,你可以在任何地方重新使用它 - 第一次可能会很慢,但次要的使用会更快。 – 2010-07-19 01:58:42

+0

有了大量的数据,理论上第一个策略在理论上需要花费更长时间才能进行数据库转移,正如你所说的第二个策略是我不喜欢的东西,但是如何实现第三个策略,一个所有用户设置的数据库? 对于第四种策略,BL知道用户访问权限,并使用DAL仅获取用户有权访问的数据,情况如何?第一和第二策略之间的变体? – jonas 2014-09-01 08:48:15

1

你可能想研究(如果在发展的另一种方法。 NET 3.5/4.0)正在使用Windows Identity Foundation

如果你有兴趣在你的网站之外保留你的授权逻辑(我假设你会这样做,如果你期望使用来自多个前端的业务层),我肯定会推荐看看WIF。您还可以使用ADFS v2.0(这是Windows Server 2008 R2中的服务器角色)与Active Directory集成。

模式&实践已经发布了guide这对挖掘该主题非常有用。