我们想在我们的应用中使用simplemembership提供程序。但是,我们觉得验证用户在角色中应该是业务逻辑的一部分。 Simplemembership需要依赖于System.web,我们不希望在业务逻辑中引用它。
有没有办法将System.web与simplemembership提供程序分离?
答案 0 :(得分:1)
我不确定我同意验证用户是否在角色中应该是业务逻辑的一部分。我想听听有关这个推理的更多细节。但是,如果您要将授权置于业务逻辑here is a method that still decouples the security model from your business model中。本文将介绍如何使用MVC 5中使用的新ASP.NET标识来完成此操作,但相同的概念将适用于SimpleMembership。根据您将授权转移到业务逻辑的原因,the approach described here may also meet your requirements。
从您的评论中可以看出,您试图通过将授权逻辑放在业务逻辑中来重用授权逻辑,因此不必为您放入的每种类型的客户端重写授权逻辑。但事实是逻辑将根据客户的不同而不同。仅举例说明比较MVC View的授权而不是Web API。 MVC框架实际上为每个提供了两个不同的AuthorizeAttribute,因为您希望在授权失败时表现不同。如果您希望重定向到登录页面的视图上的授权失败。如果在Web API调用上授权失败,则您希望返回HTTP未授权错误。对于可以访问完全相同的业务逻辑的不同类型客户端的两种不同行为。
我认为将安全逻辑与业务逻辑耦合实际上会使业务逻辑在不同实现中的可重用性降低。在Microsoft的Business Layer Guidelines中,他们明确指出," 不要将授权代码和业务处理代码混合在同一个组件中。"我将使用approach described here进一步将您的安全模型与应用程序分离。这将允许您在运行时更改安全模型,而不必重新编译和重新部署应用程序。安全模型将会改变。