2

在我的宠物项目中,我希望有一个具有以下要求的用户系统:

  • 它需要使用Db4o作为持久性模型
  • 我想使用 DI(通过Turbine)将所需的依赖项传递给我的用户模型
  • 它需要很容易插入到 asp.net-mvc
  • 它需要在没有太多麻烦的情况下进行测试
  • 它需要像 SO 一样支持匿名用户
  • 我希望将身份验证和授权分开(第一个可以没有第二个)
  • 它需要安全

我知道我在这里将一些技术放在功能之前,但由于它是一个宠物项目,我想学习一些新东西,我认为将它们作为要求包括在内是合理的。

在自己动手的过程中,我意识到我可能患有一些NIH综合症。
因为我真的不喜欢asp.net 中现有的用户框架有多么不必要的复杂,实际上它实际上只是关于安全性的所有更复杂的东西现在让我有些怀疑。继续滚动我自己的行为是否可以辩护?如果不是,您将如何使用现有的基于 IPrinciple 的框架来满足上述所有要求?

4

4 回答 4

5

在我看来,您想要做的是推出您自己的自定义 .NET 成员资格提供程序。

它将允许您在控制器操作上使用内置的 ASP.NET Authentication / Authorization属性,同时让您完全控制提供程序内部的实现(这将允许您对其进行编码以满足上述要求)。

直接从 MSDN...

实现成员资格提供程序

于 2009-12-07T14:09:12.413 回答
1

如果您继续创建自己的自定义解决方案,您将更好地了解它的难度以及您想要的功能。这将帮助您评估未来项目的现成解决方案。

OTOH,花时间开发已经现成的功能意味着您不会将时间花在项目的主要功能上。除非身份验证和授权是您项目的主要组成部分,否则您可能会考虑在另一个领域投入时间并扩展您的知识。

于 2009-12-07T14:07:50.230 回答
1

我认为你认识到你考虑的薄弱部分在哪里:也就是说,你已经将如何做你正在做的事情作为你为什么这样做的动机和 NIH(有趣:我以前从未见过) 问题。

撇开这些不谈,您的提供者是您可能重用的东西,它可能会简化您未来的一些工作。它还应该有助于您进一步熟悉该问题。只要您了解 ASP.NET 框架,以便在需要时也可以使用它(并且不是专门的,因此如果您不使用工具,您不知道自己在做什么),那么我相信你已经做好了防御。

As DOK mentioned, be cautious that you're not rolling your own here to avoid a larger task at hand in whatever your other functionality is. Don't let this be a distraction: it should be something your application really needs. If it's not, then I'd lean towards focusing on your software's core mission instead.

于 2009-12-07T14:20:29.157 回答
1

I too am working on a pet Project using ASP.net MVC and db4o and did the same thing, so you're at least not alone in going down that route :). One of the biggest reasons for me to start playing around with db4o as persistence layer is that especially authorization on field level (i.e I'm allowed to see Person A's first name but not Person B's first name) is though to achieve if you're forced into complex SQL statements and an anemic domain model.

Since I had complex authorization needs that needed to be persisted (and synchronized) in both db4o and Solr indexes I started working on rolling out my own, but only because I knew up front it was one of the key features of my pet project that I wanted 100% control over.

Now I might still use the .Net Membership provider for authentication but not (solely) for authorization of objects but only after i POC'd my authorization needs using my own.

于 2009-12-07T14:30:41.273 回答